diff options
-rw-r--r-- | include/clang/AST/Decl.h | 56 | ||||
-rw-r--r-- | include/clang/AST/DeclBase.h | 4 | ||||
-rw-r--r-- | include/clang/AST/Expr.h | 57 | ||||
-rw-r--r-- | include/clang/AST/Stmt.h | 52 | ||||
-rw-r--r-- | lib/AST/DeclSerialization.cpp | 123 | ||||
-rw-r--r-- | lib/AST/StmtSerialization.cpp | 295 | ||||
-rw-r--r-- | lib/AST/TranslationUnit.cpp | 2 | ||||
-rw-r--r-- | lib/AST/TypeSerialization.cpp | 4 |
8 files changed, 301 insertions, 292 deletions
diff --git a/include/clang/AST/Decl.h b/include/clang/AST/Decl.h index b3dd43cd18..3bae5e2d4c 100644 --- a/include/clang/AST/Decl.h +++ b/include/clang/AST/Decl.h @@ -42,7 +42,7 @@ public: protected: void EmitInRec(llvm::Serializer& S) const; - void ReadInRec(llvm::Deserializer& D); + void ReadInRec(llvm::Deserializer& D, ASTContext& C); }; /// ScopedDecl - Represent lexically scoped names, used for all ValueDecl's @@ -97,10 +97,10 @@ public: protected: void EmitInRec(llvm::Serializer& S) const; - void ReadInRec(llvm::Deserializer& D); + void ReadInRec(llvm::Deserializer& D, ASTContext& C); void EmitOutRec(llvm::Serializer& S) const; - void ReadOutRec(llvm::Deserializer& D); + void ReadOutRec(llvm::Deserializer& D, ASTContext& C); }; /// ValueDecl - Represent the declaration of a variable (in which case it is @@ -125,7 +125,7 @@ public: protected: void EmitInRec(llvm::Serializer& S) const; - void ReadInRec(llvm::Deserializer& D); + void ReadInRec(llvm::Deserializer& D, ASTContext& C); }; /// VarDecl - An instance of this class is created to represent a variable @@ -177,16 +177,16 @@ public: protected: void EmitInRec(llvm::Serializer& S) const; - void ReadInRec(llvm::Deserializer& D); + void ReadInRec(llvm::Deserializer& D, ASTContext& C); void EmitOutRec(llvm::Serializer& S) const; - void ReadOutRec(llvm::Deserializer& D); + void ReadOutRec(llvm::Deserializer& D, ASTContext& C); /// EmitImpl - Serialize this VarDecl. Called by Decl::Emit. virtual void EmitImpl(llvm::Serializer& S) const; /// ReadImpl - Deserialize this VarDecl. Called by subclasses. - virtual void ReadImpl(llvm::Deserializer& S); + virtual void ReadImpl(llvm::Deserializer& D, ASTContext& C); }; /// BlockVarDecl - Represent a local variable declaration. Note that this @@ -209,9 +209,9 @@ public: protected: /// CreateImpl - Deserialize a BlockVarDecl. Called by Decl::Create. - static BlockVarDecl* CreateImpl(llvm::Deserializer& D); + static BlockVarDecl* CreateImpl(llvm::Deserializer& D, ASTContext& C); - friend Decl* Decl::Create(llvm::Deserializer& D); + friend Decl* Decl::Create(llvm::Deserializer& D, ASTContext& C); }; /// FileVarDecl - Represent a file scoped variable declaration. This @@ -234,9 +234,9 @@ public: protected: /// CreateImpl - Deserialize a FileVarDecl. Called by Decl::Create. - static FileVarDecl* CreateImpl(llvm::Deserializer& D); + static FileVarDecl* CreateImpl(llvm::Deserializer& D, ASTContext& C); - friend Decl* Decl::Create(llvm::Deserializer& D); + friend Decl* Decl::Create(llvm::Deserializer& D, ASTContext& C); }; /// ParmVarDecl - Represent a parameter to a function. @@ -271,9 +271,9 @@ protected: virtual void EmitImpl(llvm::Serializer& S) const; /// CreateImpl - Deserialize a ParmVarDecl. Called by Decl::Create. - static ParmVarDecl* CreateImpl(llvm::Deserializer& D); + static ParmVarDecl* CreateImpl(llvm::Deserializer& D, ASTContext& C); - friend Decl* Decl::Create(llvm::Deserializer& D); + friend Decl* Decl::Create(llvm::Deserializer& D, ASTContext& C); }; /// FunctionDecl - An instance of this class is created to represent a function @@ -359,9 +359,9 @@ protected: virtual void EmitImpl(llvm::Serializer& S) const; /// CreateImpl - Deserialize a FunctionDecl. Called by Decl::Create. - static FunctionDecl* CreateImpl(llvm::Deserializer& D); + static FunctionDecl* CreateImpl(llvm::Deserializer& D, ASTContext& C); - friend Decl* Decl::Create(llvm::Deserializer& D); + friend Decl* Decl::Create(llvm::Deserializer& D, ASTContext& C); }; @@ -396,9 +396,9 @@ protected: virtual void EmitImpl(llvm::Serializer& S) const; /// CreateImpl - Deserialize a FieldDecl. Called by Decl::Create. - static FieldDecl* CreateImpl(llvm::Deserializer& D); + static FieldDecl* CreateImpl(llvm::Deserializer& D, ASTContext& C); - friend Decl* Decl::Create(llvm::Deserializer& D); + friend Decl* Decl::Create(llvm::Deserializer& D, ASTContext& C); }; /// EnumConstantDecl - An instance of this object exists for each enum constant @@ -439,9 +439,9 @@ protected: virtual void EmitImpl(llvm::Serializer& S) const; /// CreateImpl - Deserialize a EnumConstantDecl. Called by Decl::Create. - static EnumConstantDecl* CreateImpl(llvm::Deserializer& D); + static EnumConstantDecl* CreateImpl(llvm::Deserializer& D, ASTContext& C); - friend Decl* Decl::Create(llvm::Deserializer& D); + friend Decl* Decl::Create(llvm::Deserializer& D, ASTContext& C); }; @@ -491,9 +491,9 @@ protected: virtual void EmitImpl(llvm::Serializer& S) const; /// CreateImpl - Deserialize a TypedefDecl. Called by Decl::Create. - static TypedefDecl* CreateImpl(llvm::Deserializer& D); + static TypedefDecl* CreateImpl(llvm::Deserializer& D, ASTContext& C); - friend Decl* Decl::Create(llvm::Deserializer& D); + friend Decl* Decl::Create(llvm::Deserializer& D, ASTContext& C); }; @@ -585,9 +585,9 @@ protected: virtual void EmitImpl(llvm::Serializer& S) const; /// CreateImpl - Deserialize a EnumDecl. Called by Decl::Create. - static EnumDecl* CreateImpl(llvm::Deserializer& D); + static EnumDecl* CreateImpl(llvm::Deserializer& D, ASTContext& C); - friend Decl* Decl::Create(llvm::Deserializer& D); + friend Decl* Decl::Create(llvm::Deserializer& D, ASTContext& C); }; @@ -647,9 +647,9 @@ protected: virtual void EmitImpl(llvm::Serializer& S) const; /// CreateImpl - Deserialize a RecordDecl. Called by Decl::Create. - static RecordDecl* CreateImpl(Kind DK, llvm::Deserializer& D); + static RecordDecl* CreateImpl(Kind DK, llvm::Deserializer& D, ASTContext& C); - friend Decl* Decl::Create(llvm::Deserializer& D); + friend Decl* Decl::Create(llvm::Deserializer& D, ASTContext& C); }; class FileScopeAsmDecl : public Decl { @@ -671,9 +671,9 @@ protected: virtual void EmitImpl(llvm::Serializer& S) const; /// CreateImpl - Deserialize a FileScopeAsmDecl. Called by Decl::Create. - static FileScopeAsmDecl* CreateImpl(llvm::Deserializer& D); + static FileScopeAsmDecl* CreateImpl(llvm::Deserializer& D, ASTContext& C); - friend Decl* Decl::Create(llvm::Deserializer& D); + friend Decl* Decl::Create(llvm::Deserializer& D, ASTContext& C); }; /// LinkageSpecDecl - This represents a linkage specification. For example: @@ -711,7 +711,7 @@ public: protected: void EmitInRec(llvm::Serializer& S) const; - void ReadInRec(llvm::Deserializer& D); + void ReadInRec(llvm::Deserializer& D, ASTContext& C); }; } // end namespace clang diff --git a/include/clang/AST/DeclBase.h b/include/clang/AST/DeclBase.h index 4f9cc0cb66..a78d04476a 100644 --- a/include/clang/AST/DeclBase.h +++ b/include/clang/AST/DeclBase.h @@ -177,7 +177,7 @@ public: void Emit(llvm::Serializer& S) const; /// Create - Deserialize a Decl from Bitcode. - static Decl* Create(llvm::Deserializer& D); + static Decl* Create(llvm::Deserializer& D, ASTContext& C); protected: /// EmitImpl - Provides the subclass-specific serialization logic for @@ -188,7 +188,7 @@ protected: } void EmitInRec(llvm::Serializer& S) const; - void ReadInRec(llvm::Deserializer& D); + void ReadInRec(llvm::Deserializer& D, ASTContext& C); }; /// DeclContext - This is used only as base class of specific decl types that diff --git a/include/clang/AST/Expr.h b/include/clang/AST/Expr.h index b88d5bdac3..2cc32a1c4f 100644 --- a/include/clang/AST/Expr.h +++ b/include/clang/AST/Expr.h @@ -134,8 +134,8 @@ public: } static bool classof(const Expr *) { return true; } - static inline Expr* Create(llvm::Deserializer& D) { - return cast<Expr>(Stmt::Create(D)); + static inline Expr* Create(llvm::Deserializer& D, ASTContext& C) { + return cast<Expr>(Stmt::Create(D, C)); } }; @@ -167,7 +167,7 @@ public: virtual child_iterator child_end(); virtual void EmitImpl(llvm::Serializer& S) const; - static DeclRefExpr* CreateImpl(llvm::Deserializer& D); + static DeclRefExpr* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// PreDefinedExpr - [C99 6.4.2.2] - A pre-defined identifier such as __func__. @@ -200,7 +200,7 @@ public: virtual child_iterator child_end(); virtual void EmitImpl(llvm::Serializer& S) const; - static PreDefinedExpr* CreateImpl(llvm::Deserializer& D); + static PreDefinedExpr* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; class IntegerLiteral : public Expr { @@ -226,7 +226,7 @@ public: virtual child_iterator child_end(); virtual void EmitImpl(llvm::Serializer& S) const; - static IntegerLiteral* CreateImpl(llvm::Deserializer& D); + static IntegerLiteral* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; class CharacterLiteral : public Expr { @@ -253,7 +253,7 @@ public: virtual child_iterator child_end(); virtual void EmitImpl(llvm::Serializer& S) const; - static CharacterLiteral* CreateImpl(llvm::Deserializer& D); + static CharacterLiteral* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; class FloatingLiteral : public Expr { @@ -292,7 +292,7 @@ public: virtual child_iterator child_end(); virtual void EmitImpl(llvm::Serializer& S) const; - static FloatingLiteral* CreateImpl(llvm::Deserializer& D); + static FloatingLiteral* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// ImaginaryLiteral - We support imaginary integer and floating point literals, @@ -320,7 +320,7 @@ public: virtual child_iterator child_end(); virtual void EmitImpl(llvm::Serializer& S) const; - static ImaginaryLiteral* CreateImpl(llvm::Deserializer& D); + static ImaginaryLiteral* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// StringLiteral - This represents a string literal expression, e.g. "foo" @@ -358,7 +358,7 @@ public: virtual child_iterator child_end(); virtual void EmitImpl(llvm::Serializer& S) const; - static StringLiteral* CreateImpl(llvm::Deserializer& D); + static StringLiteral* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// ParenExpr - This represents a parethesized expression, e.g. "(1)". This @@ -384,7 +384,7 @@ public: virtual child_iterator child_end(); virtual void EmitImpl(llvm::Serializer& S) const; - static ParenExpr* CreateImpl(llvm::Deserializer& D); + static ParenExpr* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; @@ -465,7 +465,7 @@ public: virtual child_iterator child_end(); virtual void EmitImpl(llvm::Serializer& S) const; - static UnaryOperator* CreateImpl(llvm::Deserializer& D); + static UnaryOperator* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// SizeOfAlignOfTypeExpr - [C99 6.5.3.4] - This is only for sizeof/alignof of @@ -496,7 +496,7 @@ public: virtual child_iterator child_end(); virtual void EmitImpl(llvm::Serializer& S) const; - static SizeOfAlignOfTypeExpr* CreateImpl(llvm::Deserializer& D); + static SizeOfAlignOfTypeExpr* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; //===----------------------------------------------------------------------===// @@ -563,7 +563,7 @@ public: virtual child_iterator child_end(); virtual void EmitImpl(llvm::Serializer& S) const; - static ArraySubscriptExpr* CreateImpl(llvm::Deserializer& D); + static ArraySubscriptExpr* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; @@ -648,7 +648,7 @@ public: virtual child_iterator child_end(); virtual void EmitImpl(llvm::Serializer& S) const; - static CallExpr* CreateImpl(llvm::Deserializer& D); + static CallExpr* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// MemberExpr - [C99 6.5.2.3] Structure and Union Members. @@ -683,7 +683,7 @@ public: virtual child_iterator child_end(); virtual void EmitImpl(llvm::Serializer& S) const; - static MemberExpr* CreateImpl(llvm::Deserializer& D); + static MemberExpr* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// OCUVectorElementExpr - This represents access to specific elements of a @@ -785,7 +785,7 @@ public: virtual child_iterator child_end(); virtual void EmitImpl(llvm::Serializer& S) const; - static CompoundLiteralExpr* CreateImpl(llvm::Deserializer& D); + static CompoundLiteralExpr* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// ImplicitCastExpr - Allows us to explicitly represent implicit type @@ -813,7 +813,7 @@ public: virtual child_iterator child_end(); virtual void EmitImpl(llvm::Serializer& S) const; - static ImplicitCastExpr* CreateImpl(llvm::Deserializer& D); + static ImplicitCastExpr* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// CastExpr - [C99 6.5.4] Cast Operators. @@ -842,7 +842,7 @@ public: virtual child_iterator child_end(); virtual void EmitImpl(llvm::Serializer& S) const; - static CastExpr* CreateImpl(llvm::Deserializer& D); + static CastExpr* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; class BinaryOperator : public Expr { @@ -919,7 +919,7 @@ public: virtual child_iterator child_end(); virtual void EmitImpl(llvm::Serializer& S) const; - static BinaryOperator* CreateImpl(llvm::Deserializer& D); + static BinaryOperator* CreateImpl(llvm::Deserializer& D, ASTContext& C); protected: BinaryOperator(Expr *lhs, Expr *rhs, Opcode opc, QualType ResTy, @@ -956,7 +956,8 @@ public: } virtual void EmitImpl(llvm::Serializer& S) const; - static CompoundAssignOperator* CreateImpl(llvm::Deserializer& D); + static CompoundAssignOperator* CreateImpl(llvm::Deserializer& D, + ASTContext& C); }; /// ConditionalOperator - The ?: operator. Note that LHS may be null when the @@ -1007,7 +1008,7 @@ public: virtual child_iterator child_end(); virtual void EmitImpl(llvm::Serializer& S) const; - static ConditionalOperator* CreateImpl(llvm::Deserializer& D); + static ConditionalOperator* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// AddrLabelExpr - The GNU address of label extension, representing &&label. @@ -1035,7 +1036,7 @@ public: virtual child_iterator child_end(); virtual void EmitImpl(llvm::Serializer& S) const; - static AddrLabelExpr* CreateImpl(llvm::Deserializer& D); + static AddrLabelExpr* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// StmtExpr - This is the GNU Statement Expression extension: ({int X=4; X;}). @@ -1066,7 +1067,7 @@ public: virtual child_iterator child_end(); virtual void EmitImpl(llvm::Serializer& S) const; - static StmtExpr* CreateImpl(llvm::Deserializer& D); + static StmtExpr* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// TypesCompatibleExpr - GNU builtin-in function __builtin_type_compatible_p. @@ -1313,7 +1314,7 @@ public: virtual child_iterator child_end(); virtual void EmitImpl(llvm::Serializer& S) const; - static InitListExpr* CreateImpl(llvm::Deserializer& D); + static InitListExpr* CreateImpl(llvm::Deserializer& D, ASTContext& C); private: // Used by serializer. @@ -1350,7 +1351,7 @@ public: virtual child_iterator child_end(); virtual void EmitImpl(llvm::Serializer& S) const; - static ObjCStringLiteral* CreateImpl(llvm::Deserializer& D); + static ObjCStringLiteral* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// ObjCEncodeExpr, used for @encode in Objective-C. @@ -1379,7 +1380,7 @@ public: virtual child_iterator child_end(); virtual void EmitImpl(llvm::Serializer& S) const; - static ObjCEncodeExpr* CreateImpl(llvm::Deserializer& D); + static ObjCEncodeExpr* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// ObjCSelectorExpr used for @selector in Objective-C. @@ -1412,7 +1413,7 @@ public: virtual child_iterator child_end(); virtual void EmitImpl(llvm::Serializer& S) const; - static ObjCSelectorExpr* CreateImpl(llvm::Deserializer& D); + static ObjCSelectorExpr* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// ObjCProtocolExpr used for protocol in Objective-C. @@ -1476,7 +1477,7 @@ public: virtual child_iterator child_end(); virtual void EmitImpl(llvm::Serializer& S) const; - static ObjCIvarRefExpr* CreateImpl(llvm::Deserializer& D); + static ObjCIvarRefExpr* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; class ObjCMessageExpr : public Expr { diff --git a/include/clang/AST/Stmt.h b/include/clang/AST/Stmt.h index 8a882dfd99..5875d008b3 100644 --- a/include/clang/AST/Stmt.h +++ b/include/clang/AST/Stmt.h @@ -26,6 +26,7 @@ using llvm::dyn_cast_or_null; namespace clang { + class ASTContext; class Expr; class Decl; class ScopedDecl; @@ -117,8 +118,8 @@ public: } void Emit(llvm::Serializer& S) const; - static Stmt* Create(llvm::Deserializer& D); - + static Stmt* Create(llvm::Deserializer& D, ASTContext& C); + virtual void EmitImpl(llvm::Serializer& S) const { // This method will eventually be a pure-virtual function. assert (false && "Not implemented."); @@ -156,7 +157,7 @@ public: virtual child_iterator child_end(); virtual void EmitImpl(llvm::Serializer& S) const; - static DeclStmt* CreateImpl(llvm::Deserializer& D); + static DeclStmt* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// NullStmt - This is the null statement ";": C99 6.8.3p3. @@ -180,7 +181,7 @@ public: virtual child_iterator child_end(); virtual void EmitImpl(llvm::Serializer& S) const; - static NullStmt* CreateImpl(llvm::Deserializer& D); + static NullStmt* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// CompoundStmt - This represents a group of statements like { stmt stmt }. @@ -234,7 +235,7 @@ public: virtual child_iterator child_end(); virtual void EmitImpl(llvm::Serializer& S) const; - static CompoundStmt* CreateImpl(llvm::Deserializer& D); + static CompoundStmt* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; // SwitchCase is the base class for CaseStmt and DefaultStmt, @@ -311,7 +312,7 @@ public: virtual child_iterator child_end(); virtual void EmitImpl(llvm::Serializer& S) const; - static CaseStmt* CreateImpl(llvm::Deserializer& D); + static CaseStmt* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; class DefaultStmt : public SwitchCase { @@ -340,7 +341,7 @@ public: virtual child_iterator child_end(); virtual void EmitImpl(llvm::Serializer& S) const; - static DefaultStmt* CreateImpl(llvm::Deserializer& D); + static DefaultStmt* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; class LabelStmt : public Stmt { @@ -374,7 +375,7 @@ public: virtual child_iterator child_end(); virtual void EmitImpl(llvm::Serializer& S) const; - static LabelStmt* CreateImpl(llvm::Deserializer& D); + static LabelStmt* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; @@ -418,7 +419,7 @@ public: virtual child_iterator child_end(); virtual void EmitImpl(llvm::Serializer& S) const; - static IfStmt* CreateImpl(llvm::Deserializer& D); + static IfStmt* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// SwitchStmt - This represents a 'switch' stmt. @@ -466,7 +467,7 @@ public: virtual child_iterator child_end(); virtual void EmitImpl(llvm::Serializer& S) const; - static SwitchStmt* CreateImpl(llvm::Deserializer& D); + static SwitchStmt* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; @@ -501,7 +502,7 @@ public: virtual child_iterator child_end(); virtual void EmitImpl(llvm::Serializer& S) const; - static WhileStmt* CreateImpl(llvm::Deserializer& D); + static WhileStmt* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// DoStmt - This represents a 'do/while' stmt. @@ -536,7 +537,7 @@ public: virtual child_iterator child_end(); virtual void EmitImpl(llvm::Serializer& S) const; - static DoStmt* CreateImpl(llvm::Deserializer& D); + static DoStmt* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; @@ -581,7 +582,7 @@ public: virtual child_iterator child_end(); virtual void EmitImpl(llvm::Serializer& S) const; - static ForStmt* CreateImpl(llvm::Deserializer& D); + static ForStmt* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// GotoStmt - This represents a direct goto. @@ -609,7 +610,7 @@ public: virtual child_iterator child_end(); virtual void EmitImpl(llvm::Serializer& S) const; - static GotoStmt* CreateImpl(llvm::Deserializer& D); + static GotoStmt* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// IndirectGotoStmt - This represents an indirect goto. @@ -636,7 +637,7 @@ public: virtual child_iterator child_end(); virtual void EmitImpl(llvm::Serializer& S) const; - static IndirectGotoStmt* CreateImpl(llvm::Deserializer& D); + static IndirectGotoStmt* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; @@ -660,7 +661,7 @@ public: virtual child_iterator child_end(); virtual void EmitImpl(llvm::Serializer& S) const; - static ContinueStmt* CreateImpl(llvm::Deserializer& D); + static ContinueStmt* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// BreakStmt - This represents a break. @@ -682,7 +683,7 @@ public: virtual child_iterator child_end(); virtual void EmitImpl(llvm::Serializer& S) const; - static BreakStmt* CreateImpl(llvm::Deserializer& D); + static BreakStmt* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; @@ -717,7 +718,7 @@ public: virtual child_iterator child_end(); virtual void EmitImpl(llvm::Serializer& S) const; - static ReturnStmt* CreateImpl(llvm::Deserializer& D); + static ReturnStmt* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// AsmStmt - This represents a GNU inline-assembly statement extension. @@ -811,7 +812,7 @@ public: virtual child_iterator child_end(); virtual void EmitImpl(llvm::Serializer& S) const; - static AsmStmt* CreateImpl(llvm::Deserializer& D); + static AsmStmt* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// ObjCForCollectionStmt - This represents Objective-c's collection statement; @@ -853,7 +854,7 @@ public: virtual child_iterator child_end(); virtual void EmitImpl(llvm::Serializer& S) const; - static ObjCForCollectionStmt* CreateImpl(llvm::Deserializer& D); + static ObjCForCollectionStmt* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// ObjCAtCatchStmt - This represents objective-c's @catch statement. @@ -901,7 +902,7 @@ public: virtual child_iterator child_end(); virtual void EmitImpl(llvm::Serializer& S) const; - static ObjCAtCatchStmt* CreateImpl(llvm::Deserializer& D); + static ObjCAtCatchStmt* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// ObjCAtFinallyStmt - This represent objective-c's @finally Statement @@ -929,7 +930,7 @@ public: virtual child_iterator child_end(); virtual void EmitImpl(llvm::Serializer& S) const; - static ObjCAtFinallyStmt* CreateImpl(llvm::Deserializer& D); + static ObjCAtFinallyStmt* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// ObjCAtTryStmt - This represent objective-c's over-all @@ -978,7 +979,7 @@ public: virtual child_iterator child_end(); virtual void EmitImpl(llvm::Serializer& S) const; - static ObjCAtTryStmt* CreateImpl(llvm::Deserializer& D); + static ObjCAtTryStmt* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// ObjCAtSynchronizedStmt - This is for objective-c's @synchronized statement. @@ -1028,7 +1029,8 @@ public: virtual child_iterator child_end(); virtual void EmitImpl(llvm::Serializer& S) const; - static ObjCAtSynchronizedStmt* CreateImpl(llvm::Deserializer& D); + static ObjCAtSynchronizedStmt* CreateImpl(llvm::Deserializer& D, + ASTContext& C); }; /// ObjCAtThrowStmt - This represents objective-c's @throw statement. @@ -1060,7 +1062,7 @@ public: virtual child_iterator child_end(); virtual void EmitImpl(llvm::Serializer& S) const; - static ObjCAtThrowStmt* CreateImpl(llvm::Deserializer& D); + static ObjCAtThrowStmt* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; } // end namespace clang diff --git a/lib/AST/DeclSerialization.cpp b/lib/AST/DeclSerialization.cpp index a2e9ce1b12..bc5310c414 100644 --- a/lib/AST/DeclSerialization.cpp +++ b/lib/AST/DeclSerialization.cpp @@ -31,45 +31,45 @@ void Decl::Emit(Serializer& S) const { EmitImpl(S); } -Decl* Decl::Create(Deserializer& D) { +Decl* Decl::Create(Deserializer& D, ASTContext& C) { Kind k = static_cast<Kind>(D.ReadInt()); - + switch (k) { default: assert (false && "Not implemented."); break; case BlockVar: - return BlockVarDecl::CreateImpl(D); + return BlockVarDecl::CreateImpl(D, C); case Enum: - return EnumDecl::CreateImpl(D); + return EnumDecl::CreateImpl(D, C); case EnumConstant: - return EnumConstantDecl::CreateImpl(D); + return EnumConstantDecl::CreateImpl(D, C); case Field: - return FieldDecl::CreateImpl(D); + return FieldDecl::CreateImpl(D, C); case FileVar: - return FileVarDecl::CreateImpl(D); + return FileVarDecl::CreateImpl(D, C); case ParmVar: - return ParmVarDecl::CreateImpl(D); + return ParmVarDecl::CreateImpl(D, C); case Function: - return FunctionDecl::CreateImpl(D); + return FunctionDecl::CreateImpl(D, C); case Union: case Struct: - return RecordDecl::CreateImpl(k,D); + return RecordDecl::CreateImpl(k, D, C); case Typedef: - return TypedefDecl::CreateImpl(D); + return TypedefDecl::CreateImpl(D, C); case FileScopeAsm: - return FileScopeAsmDecl::CreateImpl(D); + return FileScopeAsmDecl::CreateImpl(D, C); } } @@ -81,7 +81,7 @@ void Decl::EmitInRec(Serializer& S) const { S.Emit(getLocation()); // From Decl. } -void Decl::ReadInRec(Deserializer& D) { +void Decl::ReadInRec(Deserializer& D, ASTContext& C) { Loc = SourceLocation::ReadVal(D); // From Decl. } @@ -94,8 +94,8 @@ void NamedDecl::EmitInRec(Serializer& S) const { S.EmitPtr(getIdentifier()); // From NamedDecl. } -void NamedDecl::ReadInRec(Deserializer& D) { - Decl::ReadInRec(D); +void NamedDecl::ReadInRec(Deserializer& D, ASTContext& C) { + Decl::ReadInRec(D, C); D.ReadPtr(Identifier); // From NamedDecl. } @@ -109,8 +109,8 @@ void ScopedDecl::EmitInRec(Serializer& S) const { S.EmitPtr(cast_or_null<Decl>(getDeclContext())); // From ScopedDecl. } -void ScopedDecl::ReadInRec(Deserializer& D) { - NamedDecl::ReadInRec(D); +void ScopedDecl::ReadInRec(Deserializer& D, ASTContext& C) { + NamedDecl::ReadInRec(D, C); D.ReadPtr(Next); // From ScopedDecl. Decl *TmpD; D.ReadPtr(TmpD); // From ScopedDecl. @@ -127,9 +127,9 @@ void ScopedDecl::EmitOutRec(Serializer& S) const { S.EmitOwnedPtr(getNextDeclarator()); // From ScopedDecl. } -void ScopedDecl::ReadOutRec(Deserializer& D) { +void ScopedDecl::ReadOutRec(Deserializer& D, ASTContext& C) { NextDeclarator = - cast_or_null<ScopedDecl>(D.ReadOwnedPtr<Decl>()); // From ScopedDecl. + cast_or_null<ScopedDecl>(D.ReadOwnedPtr<Decl>(C)); // From ScopedDecl. } //===----------------------------------------------------------------------===// @@ -141,8 +141,8 @@ void ValueDecl::EmitInRec(Serializer& S) const { S.Emit(getType()); // From ValueDecl. } -void ValueDecl::ReadInRec(Deserializer& D) { - ScopedDecl::ReadInRec(D); +void ValueDecl::ReadInRec(Deserializer& D, ASTContext& C) { + ScopedDecl::ReadInRec(D, C); DeclType = QualType::ReadVal(D); // From ValueDecl. } @@ -155,8 +155,8 @@ void VarDecl::EmitInRec(Serializer& S) const { S.EmitInt(getStorageClass()); // From VarDecl. } -void VarDecl::ReadInRec(Deserializer& D) { - ValueDecl::ReadInRec(D); +void VarDecl::ReadInRec(Deserializer& D, ASTContext& C) { + ValueDecl::ReadInRec(D, C); SClass = static_cast<StorageClass>(D.ReadInt()); // From VarDecl. } @@ -172,11 +172,12 @@ void VarDecl::EmitOutRec(Serializer& S) const { getNextDeclarator()); // From ScopedDecl. } -void VarDecl::ReadOutRec(Deserializer& D) { +void VarDecl::ReadOutRec(Deserializer& D, ASTContext& C) { Decl* next_declarator; - D.BatchReadOwnedPtrs(Init, // From VarDecl. - next_declarator); // From ScopedDecl. + D.BatchReadOwnedPtrs(Init, // From VarDecl. + next_declarator, // From ScopedDecl. + C); setNextDeclarator(cast_or_null<ScopedDecl>(next_declarator)); } @@ -187,20 +188,20 @@ void VarDecl::EmitImpl(Serializer& S) const { VarDecl::EmitOutRec(S); } -void VarDecl::ReadImpl(Deserializer& D) { - ReadInRec(D); - ReadOutRec(D); +void VarDecl::ReadImpl(Deserializer& D, ASTContext& C) { + ReadInRec(D, C); + ReadOutRec(D, C); } //===----------------------------------------------------------------------===// // BlockVarDecl Serialization. //===----------------------------------------------------------------------===// -BlockVarDecl* BlockVarDecl::CreateImpl(Deserializer& D) { +BlockVarDecl* BlockVarDecl::CreateImpl(Deserializer& D, ASTContext& C) { BlockVarDecl* decl = new BlockVarDecl(0, SourceLocation(),NULL,QualType(),None,NULL); - decl->VarDecl::ReadImpl(D); + decl->VarDecl::ReadImpl(D, C); return decl; } @@ -209,11 +210,11 @@ BlockVarDecl* BlockVarDecl::CreateImpl(Deserializer& D) { // FileVarDecl Serialization. //===----------------------------------------------------------------------===// -FileVarDecl* FileVarDecl::CreateImpl(Deserializer& D) { +FileVarDecl* FileVarDecl::CreateImpl(Deserializer& D, ASTContext& C) { FileVarDecl* decl = new FileVarDecl(0, SourceLocation(),NULL,QualType(),None,NULL); - decl->VarDecl::ReadImpl(D); + decl->VarDecl::ReadImpl(D, C); return decl; } @@ -227,11 +228,11 @@ void ParmVarDecl::EmitImpl(llvm::Serializer& S) const { S.EmitInt(getObjCDeclQualifier()); // From ParmVarDecl. } -ParmVarDecl* ParmVarDecl::CreateImpl(Deserializer& D) { +ParmVarDecl* ParmVarDecl::CreateImpl(Deserializer& D, ASTContext& C) { ParmVarDecl* decl = new ParmVarDecl(0, SourceLocation(),NULL,QualType(),None,NULL); - decl->VarDecl::ReadImpl(D); + decl->VarDecl::ReadImpl(D, C); decl->objcDeclQualifier = static_cast<ObjCDeclQualifier>(D.ReadInt()); return decl; @@ -248,17 +249,17 @@ void EnumDecl::EmitImpl(Serializer& S) const { S.BatchEmitOwnedPtrs(ElementList,getNextDeclarator()); } -EnumDecl* EnumDecl::CreateImpl(Deserializer& D) { +EnumDecl* EnumDecl::CreateImpl(Deserializer& D, ASTContext& C) { EnumDecl* decl = new EnumDecl(0, SourceLocation(),NULL,NULL); - decl->ScopedDecl::ReadInRec(D); + decl->ScopedDecl::ReadInRec(D, C); decl->setDefinition(D.ReadBool()); decl->IntegerType = QualType::ReadVal(D); Decl* next_declarator; Decl* Elist; - D.BatchReadOwnedPtrs(Elist,next_declarator); + D.BatchReadOwnedPtrs(Elist, next_declarator, C); decl->ElementList = cast_or_null<EnumConstantDecl>(Elist); decl->setNextDeclarator(cast_or_null<ScopedDecl>(next_declarator)); @@ -276,7 +277,7 @@ void EnumConstantDecl::EmitImpl(Serializer& S) const { S.BatchEmitOwnedPtrs(getNextDeclarator(),Init); } -EnumConstantDecl* EnumConstantDecl::CreateImpl(Deserializer& D) { +EnumConstantDecl* EnumConstantDecl::CreateImpl(Deserializer& D, ASTContext& C) { llvm::APSInt val(1); D.Read(val); @@ -284,11 +285,11 @@ EnumConstantDecl* EnumConstantDecl::CreateImpl(Deserializer& D) { new EnumConstantDecl(0, SourceLocation(),NULL,QualType(),NULL, val,NULL); - decl->ValueDecl::ReadInRec(D); + decl->ValueDecl::ReadInRec(D, C); Decl* next_declarator; - D.BatchReadOwnedPtrs(next_declarator,decl->Init); + D.BatchReadOwnedPtrs(next_declarator, decl->Init, C); decl->setNextDeclarator(cast_or_null<ScopedDecl>(next_declarator)); @@ -305,11 +306,11 @@ void FieldDecl::EmitImpl(Serializer& S) const { S.EmitOwnedPtr(BitWidth); } -FieldDecl* FieldDecl::CreateImpl(Deserializer& D) { +FieldDecl* FieldDecl::CreateImpl(Deserializer& D, ASTContext& C) { FieldDecl* decl = new FieldDecl(SourceLocation(), NULL, QualType(), 0); decl->DeclType.ReadBackpatch(D); - decl->ReadInRec(D); - decl->BitWidth = D.ReadOwnedPtr<Expr>(); + decl->ReadInRec(D, C); + decl->BitWidth = D.ReadOwnedPtr<Expr>(C); return decl; } @@ -337,14 +338,14 @@ void FunctionDecl::EmitImpl(Serializer& S) const { } } -FunctionDecl* FunctionDecl::CreateImpl(Deserializer& D) { +FunctionDecl* FunctionDecl::CreateImpl(Deserializer& D, ASTContext& C) { StorageClass SClass = static_cast<StorageClass>(D.ReadInt()); bool IsInline = D.ReadBool(); FunctionDecl* decl = new FunctionDecl(0, SourceLocation(),NULL,QualType(),SClass, IsInline, 0); - decl->ValueDecl::ReadInRec(D); + decl->ValueDecl::ReadInRec(D, C); D.ReadPtr(decl->DeclChain); Decl* next_declarator; @@ -358,9 +359,9 @@ FunctionDecl* FunctionDecl::CreateImpl(Deserializer& D) { if (hasParamDecls) D.BatchReadOwnedPtrs(decl->getNumParams(), reinterpret_cast<Decl**>(&decl->ParamInfo[0]), - decl->Body, next_declarator); + decl->Body, next_declarator, C); else - D.BatchReadOwnedPtrs(decl->Body, next_declarator); + D.BatchReadOwnedPtrs(decl->Body, next_declarator, C); decl- |