forked from OSchip/llvm-project
Added most of the boilerplate code for Decl serialization. Still a few
key functions to implement. llvm-svn: 43648
This commit is contained in:
parent
3ae79b3d13
commit
dda9a56975
|
@ -26,3 +26,120 @@ Decl* Decl::Materialize(llvm::Deserializer& D) {
|
|||
assert ("FIXME: not implemented.");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void NamedDecl::InternalEmit(llvm::Serializer& S) const {
|
||||
S.EmitPtr(Identifier);
|
||||
}
|
||||
|
||||
void NamedDecl::InternalRead(llvm::Deserializer& D) {
|
||||
D.ReadPtr(Identifier);
|
||||
}
|
||||
|
||||
void ScopedDecl::InternalEmit(llvm::Serializer& S) const {
|
||||
NamedDecl::InternalEmit(S);
|
||||
S.EmitPtr(Next);
|
||||
S.EmitOwnedPtr<Decl>(NextDeclarator);
|
||||
}
|
||||
|
||||
void ScopedDecl::InternalRead(llvm::Deserializer& D) {
|
||||
NamedDecl::InternalRead(D);
|
||||
D.ReadPtr(Next);
|
||||
NextDeclarator = cast<ScopedDecl>(D.ReadOwnedPtr<Decl>());
|
||||
}
|
||||
|
||||
void ValueDecl::InternalEmit(llvm::Serializer& S) const {
|
||||
S.Emit(DeclType);
|
||||
ScopedDecl::InternalEmit(S);
|
||||
}
|
||||
|
||||
void ValueDecl::InternalRead(llvm::Deserializer& D) {
|
||||
D.Read(DeclType);
|
||||
ScopedDecl::InternalRead(D);
|
||||
}
|
||||
|
||||
void VarDecl::InternalEmit(llvm::Serializer& S) const {
|
||||
S.EmitInt(SClass);
|
||||
S.EmitInt(objcDeclQualifier);
|
||||
VarDecl::InternalEmit(S);
|
||||
S.EmitOwnedPtr(Init);
|
||||
}
|
||||
|
||||
void VarDecl::InternalRead(llvm::Deserializer& D) {
|
||||
SClass = D.ReadInt();
|
||||
objcDeclQualifier = static_cast<ObjcDeclQualifier>(D.ReadInt());
|
||||
VarDecl::InternalRead(D);
|
||||
D.ReadOwnedPtr(Init);
|
||||
}
|
||||
|
||||
|
||||
void BlockVarDecl::Emit(llvm::Serializer& S) const {
|
||||
S.Emit(getLocation());
|
||||
VarDecl::InternalEmit(S);
|
||||
}
|
||||
|
||||
BlockVarDecl* BlockVarDecl::Materialize(llvm::Deserializer& D) {
|
||||
SourceLocation L = SourceLocation::ReadVal(D);
|
||||
BlockVarDecl* decl = new BlockVarDecl(L,NULL,QualType(),None,NULL);
|
||||
decl->VarDecl::InternalRead(D);
|
||||
return decl;
|
||||
}
|
||||
|
||||
void FileVarDecl::Emit(llvm::Serializer& S) const {
|
||||
S.Emit(getLocation());
|
||||
VarDecl::InternalEmit(S);
|
||||
}
|
||||
|
||||
FileVarDecl* FileVarDecl::Materialize(llvm::Deserializer& D) {
|
||||
SourceLocation L = SourceLocation::ReadVal(D);
|
||||
FileVarDecl* decl = new FileVarDecl(L,NULL,QualType(),None,NULL);
|
||||
decl->VarDecl::InternalRead(D);
|
||||
return decl;
|
||||
}
|
||||
|
||||
void ParmVarDecl::Emit(llvm::Serializer& S) const {
|
||||
S.Emit(getLocation());
|
||||
VarDecl::InternalEmit(S);
|
||||
}
|
||||
|
||||
ParmVarDecl* ParmVarDecl::Materialize(llvm::Deserializer& D) {
|
||||
SourceLocation L = SourceLocation::ReadVal(D);
|
||||
ParmVarDecl* decl = new ParmVarDecl(L,NULL,QualType(),None,NULL);
|
||||
decl->VarDecl::InternalRead(D);
|
||||
return decl;
|
||||
}
|
||||
|
||||
void FunctionDecl::Emit(llvm::Serializer& S) const {
|
||||
S.Emit(getLocation());
|
||||
S.EmitInt(SClass);
|
||||
S.EmitBool(IsInline);
|
||||
|
||||
ValueDecl::InternalEmit(S);
|
||||
|
||||
unsigned NumParams = getNumParams();
|
||||
S.EmitInt(NumParams);
|
||||
|
||||
for (unsigned i = 0 ; i < NumParams; ++i)
|
||||
S.EmitOwnedPtr(ParamInfo[i]);
|
||||
|
||||
S.EmitOwnedPtr(Body);
|
||||
}
|
||||
|
||||
FunctionDecl* FunctionDecl::Materialize(llvm::Deserializer& D) {
|
||||
SourceLocation L = SourceLocation::ReadVal(D);
|
||||
StorageClass SClass = static_cast<StorageClass>(D.ReadInt());
|
||||
bool IsInline = D.ReadBool();
|
||||
|
||||
FunctionDecl* decl = new FunctionDecl(L,NULL,QualType(),SClass,IsInline);
|
||||
|
||||
decl->ValueDecl::InternalRead(D);
|
||||
|
||||
unsigned NumParams = D.ReadInt();
|
||||
decl->ParamInfo = NumParams ? new ParmVarDecl*[NumParams] : NULL;
|
||||
|
||||
for (unsigned i = 0 ; i < NumParams; ++i)
|
||||
D.ReadOwnedPtr(decl->ParamInfo[i]);
|
||||
|
||||
D.ReadOwnedPtr(decl->Body);
|
||||
|
||||
return decl;
|
||||
}
|
||||
|
|
|
@ -185,16 +185,10 @@ public:
|
|||
return D->getKind() >= NamedFirst && D->getKind() <= NamedLast;
|
||||
}
|
||||
static bool classof(const NamedDecl *D) { return true; }
|
||||
|
||||
/// Emit - Serialize this NamedDecl to Bitcode.
|
||||
void Emit(llvm::Serializer& S) const {
|
||||
static_cast<const Decl*>(this)->Emit(S);
|
||||
}
|
||||
|
||||
/// Materialize - Deserialize a ScopedDecl from Bitcode.
|
||||
static inline NamedDecl* Materialize(llvm::Deserializer& D) {
|
||||
return cast<NamedDecl>(Decl::Materialize(D));
|
||||
}
|
||||
|
||||
protected:
|
||||
void InternalEmit(llvm::Serializer& S) const;
|
||||
void InternalRead(llvm::Deserializer& D);
|
||||
};
|
||||
|
||||
/// ScopedDecl - Represent lexically scoped names, used for all ValueDecl's
|
||||
|
@ -229,16 +223,10 @@ public:
|
|||
return D->getKind() >= ScopedFirst && D->getKind() <= ScopedLast;
|
||||
}
|
||||
static bool classof(const ScopedDecl *D) { return true; }
|
||||
|
||||
/// Emit - Serialize this ScopedDecl to Bitcode.
|
||||
void Emit(llvm::Serializer& S) const {
|
||||
static_cast<const Decl*>(this)->Emit(S);
|
||||
}
|
||||
|
||||
/// Materialize - Deserialize a ScopedDecl from Bitcode.
|
||||
static inline ScopedDecl* Materialize(llvm::Deserializer& D) {
|
||||
return cast<ScopedDecl>(Decl::Materialize(D));
|
||||
}
|
||||
|
||||
protected:
|
||||
void InternalEmit(llvm::Serializer& S) const;
|
||||
void InternalRead(llvm::Deserializer& D);
|
||||
};
|
||||
|
||||
/// ValueDecl - Represent the declaration of a variable (in which case it is
|
||||
|
@ -259,16 +247,10 @@ public:
|
|||
return D->getKind() >= ValueFirst && D->getKind() <= ValueLast;
|
||||
}
|
||||
static bool classof(const ValueDecl *D) { return true; }
|
||||
|
||||
/// Emit - Serialize this ValueDecl to Bitcode.
|
||||
void Emit(llvm::Serializer& S) const {
|
||||
static_cast<const Decl*>(this)->Emit(S);
|
||||
}
|
||||
|
||||
/// Materialize - Deserialize a ValueDecl from Bitcode.
|
||||
static inline ValueDecl* Materialize(llvm::Deserializer& D) {
|
||||
return cast<ValueDecl>(Decl::Materialize(D));
|
||||
}
|
||||
|
||||
protected:
|
||||
void InternalEmit(llvm::Serializer& S) const;
|
||||
void InternalRead(llvm::Deserializer& D);
|
||||
};
|
||||
|
||||
/// VarDecl - An instance of this class is created to represent a variable
|
||||
|
@ -339,16 +321,9 @@ private:
|
|||
|
||||
friend class StmtIteratorBase;
|
||||
|
||||
public:
|
||||
/// Emit - Serialize this VarDecl to Bitcode.
|
||||
void Emit(llvm::Serializer& S) const {
|
||||
static_cast<const Decl*>(this)->Emit(S);
|
||||
}
|
||||
|
||||
/// Materialize - Deserialize a VarDecl from Bitcode.
|
||||
static inline VarDecl* Materialize(llvm::Deserializer& D) {
|
||||
return cast<VarDecl>(Decl::Materialize(D));
|
||||
}
|
||||
protected:
|
||||
void InternalEmit(llvm::Serializer& S) const;
|
||||
void InternalRead(llvm::Deserializer& D);
|
||||
};
|
||||
|
||||
/// BlockVarDecl - Represent a local variable declaration.
|
||||
|
|
Loading…
Reference in New Issue