}
FieldDecl* FieldDecl::CreateImpl(Deserializer& D) {
- QualType DeclType = QualType::ReadVal(D);
- FieldDecl* decl = new FieldDecl(SourceLocation(),NULL,DeclType);
+ FieldDecl* decl = new FieldDecl(SourceLocation(),NULL,QualType());
+ decl->DeclType.ReadBackpatch(D);
decl->ReadInRec(D);
decl->BitWidth = D.ReadOwnedPtr<Expr>();
return decl;
return Q;
}
+void QualType::ReadBackpatch(Deserializer& D) {
+ D.ReadUIntPtr(ThePtr,true);
+ ThePtr |= D.ReadInt();
+}
+
//===----------------------------------------------------------------------===//
// Type Serialization: Dispatch code to handle specific types.
//===----------------------------------------------------------------------===//
break;
case Type::Tagged:
- TagType::CreateImpl(Context,PtrID,D);
+ D.RegisterPtr(PtrID,TagType::CreateImpl(Context,D));
break;
case Type::TypeName:
S.EmitOwnedPtr(getDecl());
}
-Type* TagType::CreateImpl(ASTContext& Context, SerializedPtrID& PtrID,
- Deserializer& D) {
-
+Type* TagType::CreateImpl(ASTContext& Context, Deserializer& D) {
std::vector<Type*>& Types =
const_cast<std::vector<Type*>&>(Context.getTypes());
TagType* T = new TagType(NULL,QualType());
Types.push_back(T);
- // Forward register the type pointer before deserializing the decl.
- D.RegisterPtr(PtrID,T);
-
// Deserialize the decl.
T->decl = cast<TagDecl>(D.ReadOwnedPtr<Decl>());
class TagDecl;
class RecordDecl;
class EnumDecl;
+ class FieldDecl;
class ObjcInterfaceDecl;
class ObjcProtocolDecl;
class ObjcMethodDecl;
/// Read - Deserialize a QualType from Bitcode.
static QualType ReadVal(llvm::Deserializer& D);
+
+private:
+ void ReadBackpatch(llvm::Deserializer& D);
+ friend class FieldDecl;
};
} // end clang.
protected:
virtual void EmitImpl(llvm::Serializer& S) const;
- static Type* CreateImpl(ASTContext& Context, llvm::SerializedPtrID& PtrID,
- llvm::Deserializer& D);
+ static Type* CreateImpl(ASTContext& Context, llvm::Deserializer& D);
friend class Type;
};