aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/clang/AST/Decl.h56
-rw-r--r--include/clang/AST/DeclBase.h4
-rw-r--r--include/clang/AST/Expr.h57
-rw-r--r--include/clang/AST/Stmt.h52
-rw-r--r--lib/AST/DeclSerialization.cpp123
-rw-r--r--lib/AST/StmtSerialization.cpp295
-rw-r--r--lib/AST/TranslationUnit.cpp2
-rw-r--r--lib/AST/TypeSerialization.cpp4
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-