[cfe-commits] r49353 - in /cfe/trunk: include/clang/AST/Decl.h include/clang/AST/DeclBase.h include/clang/AST/Expr.h include/clang/AST/Stmt.h lib/AST/DeclSerialization.cpp lib/AST/StmtSerialization.cpp lib/AST/TranslationUnit.cpp lib/AST/TypeSerialization.cpp

Ted Kremenek kremenek at apple.com
Mon Apr 7 15:10:57 PDT 2008


Looks great!  Thanks Sam.

On Apr 7, 2008, at 2:55 PM, Sam Bishop wrote:

> Author: sbishop
> Date: Mon Apr  7 16:55:54 2008
> New Revision: 49353
>
> URL: http://llvm.org/viewvc/llvm-project?rev=49353&view=rev
> Log:
> Pass the ASTContext object around when deserializing Decl and Stmt  
> objects, so
> they can be created using the same allocator as in the "from source  
> code" case.
>
> Modified:
>    cfe/trunk/include/clang/AST/Decl.h
>    cfe/trunk/include/clang/AST/DeclBase.h
>    cfe/trunk/include/clang/AST/Expr.h
>    cfe/trunk/include/clang/AST/Stmt.h
>    cfe/trunk/lib/AST/DeclSerialization.cpp
>    cfe/trunk/lib/AST/StmtSerialization.cpp
>    cfe/trunk/lib/AST/TranslationUnit.cpp
>    cfe/trunk/lib/AST/TypeSerialization.cpp
>
> Modified: cfe/trunk/include/clang/AST/Decl.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/Decl.h?rev=49353&r1=49352&r2=49353&view=diff
>
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- cfe/trunk/include/clang/AST/Decl.h (original)
> +++ cfe/trunk/include/clang/AST/Decl.h Mon Apr  7 16:55:54 2008
> @@ -42,7 +42,7 @@
>
> 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 @@
>
> 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 @@
>
> 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 @@
>
> 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 @@
>
> 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 @@
>
> 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 @@
>   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 @@
>   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 @@
>   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 @@
>   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 @@
>   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 @@
>   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 @@
>   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 @@
>   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 @@
>
> protected:
>   void EmitInRec(llvm::Serializer& S) const;
> -  void ReadInRec(llvm::Deserializer& D);
> +  void ReadInRec(llvm::Deserializer& D, ASTContext& C);
> };
>
> }  // end namespace clang
>
> Modified: cfe/trunk/include/clang/AST/DeclBase.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/DeclBase.h?rev=49353&r1=49352&r2=49353&view=diff
>
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- cfe/trunk/include/clang/AST/DeclBase.h (original)
> +++ cfe/trunk/include/clang/AST/DeclBase.h Mon Apr  7 16:55:54 2008
> @@ -177,7 +177,7 @@
>   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 @@
>   }
>
>   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
>
> Modified: cfe/trunk/include/clang/AST/Expr.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/Expr.h?rev=49353&r1=49352&r2=49353&view=diff
>
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- cfe/trunk/include/clang/AST/Expr.h (original)
> +++ cfe/trunk/include/clang/AST/Expr.h Mon Apr  7 16:55:54 2008
> @@ -134,8 +134,8 @@
>   }
>   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 @@
>   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 @@
>   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 @@
>   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 @@
>   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 @@
>   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 @@
>   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 @@
>   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 @@
>   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 @@
>   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 @@
>   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 @@
>   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 @@
>   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 @@
>   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 @@
>   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 @@
>   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 @@
>   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 @@
>   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 @@
>   }
>
>   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 @@
>   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 @@
>   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 @@
>   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 @@
>   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 @@
>   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 @@
>   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 @@
>   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 @@
>   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 {
>
> Modified: cfe/trunk/include/clang/AST/Stmt.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/Stmt.h?rev=49353&r1=49352&r2=49353&view=diff
>
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- cfe/trunk/include/clang/AST/Stmt.h (original)
> +++ cfe/trunk/include/clang/AST/Stmt.h Mon Apr  7 16:55:54 2008
> @@ -26,6 +26,7 @@
> using llvm::dyn_cast_or_null;
>
> namespace clang {
> +  class ASTContext;
>   class Expr;
>   class Decl;
>   class ScopedDecl;
> @@ -117,8 +118,8 @@
>   }
>
>   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 @@
>   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 @@
>   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 @@
>   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 @@
>   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 @@
>   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 @@
>   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 @@
>   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 @@
>   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 @@
>   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 @@
>   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 @@
>   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 @@
>   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 @@
>   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 @@
>   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 @@
>   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 @@
>   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 @@
>   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 @@
>   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 @@
>   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 @@
>   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 @@
>   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 @@
>   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 @@
>   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
>
> Modified: cfe/trunk/lib/AST/DeclSerialization.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/DeclSerialization.cpp?rev=49353&r1=49352&r2=49353&view=diff
>
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- cfe/trunk/lib/AST/DeclSerialization.cpp (original)
> +++ cfe/trunk/lib/AST/DeclSerialization.cpp Mon Apr  7 16:55:54 2008
> @@ -31,45 +31,45 @@
>   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 @@
>   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 @@
>   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 @@
>   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 @@
>   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 @@
>   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 @@
>   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 @@
>                        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 @@
>   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 @@
> //      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 @@
>   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 @@
>   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 @@
>   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 @@
>     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 @@
>   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 @@
>   }
> }
>
> -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 @@
>   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->setNextDeclarator(cast_or_null<ScopedDecl>(next_declarator));
>
> @@ -385,10 +386,12 @@
>     ScopedDecl::EmitOutRec(S);
> }
>
> -RecordDecl* RecordDecl::CreateImpl(Decl::Kind DK, Deserializer& D) {
> +RecordDecl* RecordDecl::CreateImpl(Decl::Kind DK, Deserializer& D,
> +                                   ASTContext& C) {
> +
>   RecordDecl* decl = new RecordDecl(DK,0,SourceLocation(),NULL,NULL);
>
> -  decl->ScopedDecl::ReadInRec(D);
> +  decl->ScopedDecl::ReadInRec(D, C);
>   decl->setDefinition(D.ReadBool());
>   decl->setHasFlexibleArrayMember(D.ReadBool());
>   decl->NumMembers = D.ReadSInt();
> @@ -399,12 +402,12 @@
>
>     D.BatchReadOwnedPtrs((unsigned) decl->getNumMembers(),
>                          (Decl**) &decl->Members[0],
> -                         next_declarator);
> +                         next_declarator, C);
>
>     decl- 
> >setNextDeclarator(cast_or_null<ScopedDecl>(next_declarator));
>   }
>   else
> -    decl->ScopedDecl::ReadOutRec(D);
> +    decl->ScopedDecl::ReadOutRec(D, C);
>
>   return decl;
> }
> @@ -419,13 +422,13 @@
>   ScopedDecl::EmitOutRec(S);
> }
>
> -TypedefDecl* TypedefDecl::CreateImpl(Deserializer& D) {
> +TypedefDecl* TypedefDecl::CreateImpl(Deserializer& D, ASTContext&  
> C) {
>   QualType T = QualType::ReadVal(D);
>
>   TypedefDecl* decl = new TypedefDecl(0,  
> SourceLocation(),NULL,T,NULL);
>
> -  decl->ScopedDecl::ReadInRec(D);
> -  decl->ScopedDecl::ReadOutRec(D);
> +  decl->ScopedDecl::ReadInRec(D, C);
> +  decl->ScopedDecl::ReadOutRec(D, C);
>
>   return decl;
> }
> @@ -440,8 +443,8 @@
>   S.EmitPtr(D);
> }
>
> -void LinkageSpecDecl::ReadInRec(Deserializer& D) {
> -  Decl::ReadInRec(D);
> +void LinkageSpecDecl::ReadInRec(Deserializer& D, ASTContext& C) {
> +  Decl::ReadInRec(D, C);
>   Language = static_cast<LanguageIDs>(D.ReadInt());
>   D.ReadPtr(this->D);
> }
> @@ -456,11 +459,11 @@
>   S.EmitOwnedPtr(AsmString);
> }
>
> -FileScopeAsmDecl* FileScopeAsmDecl::CreateImpl(Deserializer& D) {
> +FileScopeAsmDecl* FileScopeAsmDecl::CreateImpl(Deserializer& D,  
> ASTContext& C) {
>   FileScopeAsmDecl* decl = new FileScopeAsmDecl(SourceLocation(), 0);
>
> -  decl->Decl::ReadInRec(D);
> -  decl->AsmString = cast<StringLiteral>(D.ReadOwnedPtr<Expr>());
> +  decl->Decl::ReadInRec(D, C);
> +  decl->AsmString = cast<StringLiteral>(D.ReadOwnedPtr<Expr>(C));
> //  D.ReadOwnedPtr(D.ReadOwnedPtr<StringLiteral>())<#T * * Ptr#>,  
> <#bool AutoRegister#>)(decl->AsmString);
>
>   return decl;
>
> Modified: cfe/trunk/lib/AST/StmtSerialization.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/StmtSerialization.cpp?rev=49353&r1=49352&r2=49353&view=diff
>
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- cfe/trunk/lib/AST/StmtSerialization.cpp (original)
> +++ cfe/trunk/lib/AST/StmtSerialization.cpp Mon Apr  7 16:55:54 2008
> @@ -27,7 +27,7 @@
>   S.FlushRecord();
> }
>
> -Stmt* Stmt::Create(Deserializer& D) {
> +Stmt* Stmt::Create(Deserializer& D, ASTContext& C) {
>   StmtClass SC = static_cast<StmtClass>(D.ReadInt());
>
>   switch (SC) {
> @@ -36,155 +36,155 @@
>       return NULL;
>
>     case AddrLabelExprClass:
> -      return AddrLabelExpr::CreateImpl(D);
> +      return AddrLabelExpr::CreateImpl(D, C);
>
>     case ArraySubscriptExprClass:
> -      return ArraySubscriptExpr::CreateImpl(D);
> +      return ArraySubscriptExpr::CreateImpl(D, C);
>
>     case AsmStmtClass:
> -      return AsmStmt::CreateImpl(D);
> +      return AsmStmt::CreateImpl(D, C);
>
>     case BinaryOperatorClass:
> -      return BinaryOperator::CreateImpl(D);
> +      return BinaryOperator::CreateImpl(D, C);
>
>     case BreakStmtClass:
> -      return BreakStmt::CreateImpl(D);
> +      return BreakStmt::CreateImpl(D, C);
>
>     case CallExprClass:
> -      return CallExpr::CreateImpl(D);
> +      return CallExpr::CreateImpl(D, C);
>
>     case CaseStmtClass:
> -      return CaseStmt::CreateImpl(D);
> +      return CaseStmt::CreateImpl(D, C);
>
>     case CastExprClass:
> -      return CastExpr::CreateImpl(D);
> +      return CastExpr::CreateImpl(D, C);
>
>     case CharacterLiteralClass:
> -      return CharacterLiteral::CreateImpl(D);
> +      return CharacterLiteral::CreateImpl(D, C);
>
>     case CompoundAssignOperatorClass:
> -      return CompoundAssignOperator::CreateImpl(D);
> +      return CompoundAssignOperator::CreateImpl(D, C);
>
>     case CompoundLiteralExprClass:
> -      return CompoundLiteralExpr::CreateImpl(D);
> +      return CompoundLiteralExpr::CreateImpl(D, C);
>
>     case CompoundStmtClass:
> -      return CompoundStmt::CreateImpl(D);
> +      return CompoundStmt::CreateImpl(D, C);
>
>     case ConditionalOperatorClass:
> -      return ConditionalOperator::CreateImpl(D);
> +      return ConditionalOperator::CreateImpl(D, C);
>
>     case ContinueStmtClass:
> -      return ContinueStmt::CreateImpl(D);
> +      return ContinueStmt::CreateImpl(D, C);
>
>     case DeclRefExprClass:
> -      return DeclRefExpr::CreateImpl(D);
> +      return DeclRefExpr::CreateImpl(D, C);
>
>     case DeclStmtClass:
> -      return DeclStmt::CreateImpl(D);
> +      return DeclStmt::CreateImpl(D, C);
>
>     case DefaultStmtClass:
> -      return DefaultStmt::CreateImpl(D);
> +      return DefaultStmt::CreateImpl(D, C);
>
>     case DoStmtClass:
> -      return DoStmt::CreateImpl(D);
> +      return DoStmt::CreateImpl(D, C);
>
>     case FloatingLiteralClass:
> -      return FloatingLiteral::CreateImpl(D);
> +      return FloatingLiteral::CreateImpl(D, C);
>
>     case ForStmtClass:
> -      return ForStmt::CreateImpl(D);
> +      return ForStmt::CreateImpl(D, C);
>
>     case GotoStmtClass:
> -      return GotoStmt::CreateImpl(D);
> +      return GotoStmt::CreateImpl(D, C);
>
>     case IfStmtClass:
> -      return IfStmt::CreateImpl(D);
> +      return IfStmt::CreateImpl(D, C);
>
>     case ImaginaryLiteralClass:
> -      return ImaginaryLiteral::CreateImpl(D);
> +      return ImaginaryLiteral::CreateImpl(D, C);
>
>     case ImplicitCastExprClass:
> -      return ImplicitCastExpr::CreateImpl(D);
> +      return ImplicitCastExpr::CreateImpl(D, C);
>
>     case IndirectGotoStmtClass:
> -      return IndirectGotoStmt::CreateImpl(D);
> +      return IndirectGotoStmt::CreateImpl(D, C);
>
>     case InitListExprClass:
> -      return InitListExpr::CreateImpl(D);
> +      return InitListExpr::CreateImpl(D, C);
>
>     case IntegerLiteralClass:
> -      return IntegerLiteral::CreateImpl(D);
> +      return IntegerLiteral::CreateImpl(D, C);
>
>     case LabelStmtClass:
> -      return LabelStmt::CreateImpl(D);
> +      return LabelStmt::CreateImpl(D, C);
>
>     case MemberExprClass:
> -      return MemberExpr::CreateImpl(D);
> +      return MemberExpr::CreateImpl(D, C);
>
>     case NullStmtClass:
> -      return NullStmt::CreateImpl(D);
> +      return NullStmt::CreateImpl(D, C);
>
>     case ParenExprClass:
> -      return ParenExpr::CreateImpl(D);
> +      return ParenExpr::CreateImpl(D, C);
>
>     case PreDefinedExprClass:
> -      return PreDefinedExpr::CreateImpl(D);
> +      return PreDefinedExpr::CreateImpl(D, C);
>
>     case ReturnStmtClass:
> -      return ReturnStmt::CreateImpl(D);
> +      return ReturnStmt::CreateImpl(D, C);
>
>     case SizeOfAlignOfTypeExprClass:
> -      return SizeOfAlignOfTypeExpr::CreateImpl(D);
> +      return SizeOfAlignOfTypeExpr::CreateImpl(D, C);
>
>     case StmtExprClass:
> -      return StmtExpr::CreateImpl(D);
> +      return StmtExpr::CreateImpl(D, C);
>
>     case StringLiteralClass:
> -      return StringLiteral::CreateImpl(D);
> +      return StringLiteral::CreateImpl(D, C);
>
>     case SwitchStmtClass:
> -      return SwitchStmt::CreateImpl(D);
> +      return SwitchStmt::CreateImpl(D, C);
>
>     case UnaryOperatorClass:
> -      return UnaryOperator::CreateImpl(D);
> +      return UnaryOperator::CreateImpl(D, C);
>
>     case WhileStmtClass:
> -      return WhileStmt::CreateImpl(D);
> +      return WhileStmt::CreateImpl(D, C);
>
>     //==--------------------------------------==//
>     //    Objective C
>     //==--------------------------------------==//
>
>     case ObjCAtCatchStmtClass:
> -      return ObjCAtCatchStmt::CreateImpl(D);
> +      return ObjCAtCatchStmt::CreateImpl(D, C);
>
>     case ObjCAtFinallyStmtClass:
> -      return ObjCAtFinallyStmt::CreateImpl(D);
> +      return ObjCAtFinallyStmt::CreateImpl(D, C);
>
>     case ObjCAtSynchronizedStmtClass:
> -      return ObjCAtSynchronizedStmt::CreateImpl(D);
> +      return ObjCAtSynchronizedStmt::CreateImpl(D, C);
>
>     case ObjCAtThrowStmtClass:
> -      return ObjCAtThrowStmt::CreateImpl(D);
> +      return ObjCAtThrowStmt::CreateImpl(D, C);
>
>     case ObjCAtTryStmtClass:
> -      return ObjCAtTryStmt::CreateImpl(D);
> +      return ObjCAtTryStmt::CreateImpl(D, C);
>
>     case ObjCEncodeExprClass:
> -      return ObjCEncodeExpr::CreateImpl(D);
> +      return ObjCEncodeExpr::CreateImpl(D, C);
>
>     case ObjCForCollectionStmtClass:
> -      return ObjCForCollectionStmt::CreateImpl(D);
> +      return ObjCForCollectionStmt::CreateImpl(D, C);
>
>     case ObjCIvarRefExprClass:
> -      return ObjCIvarRefExpr::CreateImpl(D);
> +      return ObjCIvarRefExpr::CreateImpl(D, C);
>
>     case ObjCSelectorExprClass:
> -      return ObjCSelectorExpr::CreateImpl(D);
> +      return ObjCSelectorExpr::CreateImpl(D, C);
>
>     case ObjCStringLiteralClass:
> -      return ObjCStringLiteral::CreateImpl(D);
> +      return ObjCStringLiteral::CreateImpl(D, C);
>   }
> }
>
> @@ -199,7 +199,7 @@
>   S.EmitPtr(Label);
> }
>
> -AddrLabelExpr* AddrLabelExpr::CreateImpl(Deserializer& D) {
> +AddrLabelExpr* AddrLabelExpr::CreateImpl(Deserializer& D,  
> ASTContext& C) {
>   QualType t = QualType::ReadVal(D);
>   SourceLocation AALoc = SourceLocation::ReadVal(D);
>   SourceLocation LLoc = SourceLocation::ReadVal(D);
> @@ -214,11 +214,11 @@
>   S.BatchEmitOwnedPtrs(getLHS(),getRHS());
> }
>
> -ArraySubscriptExpr* ArraySubscriptExpr::CreateImpl(Deserializer& D) {
> +ArraySubscriptExpr* ArraySubscriptExpr::CreateImpl(Deserializer& D,  
> ASTContext& C) {
>   QualType t = QualType::ReadVal(D);
>   SourceLocation L = SourceLocation::ReadVal(D);
>   Expr *LHS, *RHS;
> -  D.BatchReadOwnedPtrs(LHS,RHS);
> +  D.BatchReadOwnedPtrs(LHS, RHS, C);
>   return new ArraySubscriptExpr(LHS,RHS,t,L);
> }
>
> @@ -249,9 +249,9 @@
>     Clobbers[i]->EmitImpl(S);
> }
>
> -AsmStmt* AsmStmt::CreateImpl(Deserializer& D) {
> +AsmStmt* AsmStmt::CreateImpl(Deserializer& D, ASTContext& C) {
>   SourceLocation ALoc = SourceLocation::ReadVal(D);
> -  StringLiteral *AsmStr = StringLiteral::CreateImpl(D);
> +  StringLiteral *AsmStr = StringLiteral::CreateImpl(D, C);
>   SourceLocation PLoc = SourceLocation::ReadVal(D);
>
>   bool IsVolatile = D.ReadBool();
> @@ -275,16 +275,16 @@
>
>   Stmt->Constraints.reserve(size);
>   for (unsigned i = 0; i < size; ++i)
> -    Stmt->Constraints.push_back(StringLiteral::CreateImpl(D));
> +    Stmt->Constraints.push_back(StringLiteral::CreateImpl(D, C));
>
>   Stmt->Exprs.reserve(size);
>   for (unsigned i = 0; i < size; ++i)
> -    Stmt->Exprs.push_back(D.ReadOwnedPtr<Expr>());
> +    Stmt->Exprs.push_back(D.ReadOwnedPtr<Expr>(C));
>
>   unsigned NumClobbers = D.ReadInt();
>   Stmt->Clobbers.reserve(NumClobbers);
>   for (unsigned i = 0; i < NumClobbers; ++i)
> -    Stmt->Clobbers.push_back(StringLiteral::CreateImpl(D));
> +    Stmt->Clobbers.push_back(StringLiteral::CreateImpl(D, C));
>
>   return Stmt;
> }
> @@ -296,12 +296,12 @@
>   S.BatchEmitOwnedPtrs(getLHS(),getRHS());
> }
>
> -BinaryOperator* BinaryOperator::CreateImpl(Deserializer& D) {
> +BinaryOperator* BinaryOperator::CreateImpl(Deserializer& D,  
> ASTContext& C) {
>   Opcode Opc = static_cast<Opcode>(D.ReadInt());
>   SourceLocation OpLoc = SourceLocation::ReadVal(D);
>   QualType Result = QualType::ReadVal(D);
>   Expr *LHS, *RHS;
> -  D.BatchReadOwnedPtrs(LHS,RHS);
> +  D.BatchReadOwnedPtrs(LHS, RHS, C);
>
>   return new BinaryOperator(LHS,RHS,Opc,Result,OpLoc);
> }
> @@ -310,7 +310,7 @@
>   S.Emit(BreakLoc);
> }
>
> -BreakStmt* BreakStmt::CreateImpl(Deserializer& D) {
> +BreakStmt* BreakStmt::CreateImpl(Deserializer& D, ASTContext& C) {
>   SourceLocation Loc = SourceLocation::ReadVal(D);
>   return new BreakStmt(Loc);
> }
> @@ -322,12 +322,12 @@
>   S.BatchEmitOwnedPtrs(NumArgs+1,SubExprs);
> }
>
> -CallExpr* CallExpr::CreateImpl(Deserializer& D) {
> +CallExpr* CallExpr::CreateImpl(Deserializer& D, ASTContext& C) {
>   QualType t = QualType::ReadVal(D);
>   SourceLocation L = SourceLocation::ReadVal(D);
>   unsigned NumArgs = D.ReadInt();
>   Expr** SubExprs = new Expr*[NumArgs+1];
> -  D.BatchReadOwnedPtrs(NumArgs+1,SubExprs);
> +  D.BatchReadOwnedPtrs(NumArgs+1, SubExprs, C);
>
>   return new CallExpr(SubExprs,NumArgs,t,L);
> }
> @@ -338,11 +338,11 @@
>   S.BatchEmitOwnedPtrs((unsigned) END_EXPR,&SubExprs[0]);
> }
>
> -CaseStmt* CaseStmt::CreateImpl(Deserializer& D) {
> +CaseStmt* CaseStmt::CreateImpl(Deserializer& D, ASTContext& C) {
>   SourceLocation CaseLoc = SourceLocation::ReadVal(D);
>   CaseStmt* stmt = new CaseStmt(NULL,NULL,NULL,CaseLoc);
>   D.ReadPtr(stmt->NextSwitchCase);
> -  D.BatchReadOwnedPtrs((unsigned) END_EXPR,&stmt->SubExprs[0]);
> +  D.BatchReadOwnedPtrs((unsigned) END_EXPR, &stmt->SubExprs[0], C);
>   return stmt;
> }
>
> @@ -352,10 +352,10 @@
>   S.EmitOwnedPtr(Op);
> }
>
> -CastExpr* CastExpr::CreateImpl(Deserializer& D) {
> +CastExpr* CastExpr::CreateImpl(Deserializer& D, ASTContext& C) {
>   QualType t = QualType::ReadVal(D);
>   SourceLocation Loc = SourceLocation::ReadVal(D);
> -  Expr* Op = D.ReadOwnedPtr<Expr>();
> +  Expr* Op = D.ReadOwnedPtr<Expr>(C);
>   return new CastExpr(t,Op,Loc);
> }
>
> @@ -366,7 +366,7 @@
>   S.Emit(getType());
> }
>
> -CharacterLiteral* CharacterLiteral::CreateImpl(Deserializer& D) {
> +CharacterLiteral* CharacterLiteral::CreateImpl(Deserializer& D,  
> ASTContext& C) {
>   unsigned value = D.ReadInt();
>   SourceLocation Loc = SourceLocation::ReadVal(D);
>   QualType T = QualType::ReadVal(D);
> @@ -382,13 +382,13 @@
> }
>
> CompoundAssignOperator*
> -CompoundAssignOperator::CreateImpl(Deserializer& D) {
> +CompoundAssignOperator::CreateImpl(Deserializer& D, ASTContext& C) {
>   QualType t = QualType::ReadVal(D);
>   QualType c = QualType::ReadVal(D);
>   SourceLocation L = SourceLocation::ReadVal(D);
>   Opcode Opc = static_cast<Opcode>(D.ReadInt());
>   Expr* LHS, *RHS;
> -  D.BatchReadOwnedPtrs(LHS,RHS);
> +  D.BatchReadOwnedPtrs(LHS, RHS, C);
>
>   return new CompoundAssignOperator(LHS,RHS,Opc,t,c,L);
> }
> @@ -400,11 +400,11 @@
>   S.EmitOwnedPtr(Init);
> }
>
> -CompoundLiteralExpr* CompoundLiteralExpr::CreateImpl(Deserializer&  
> D) {
> +CompoundLiteralExpr* CompoundLiteralExpr::CreateImpl(Deserializer&  
> D, ASTContext& C) {
>   QualType Q = QualType::ReadVal(D);
>   SourceLocation L = SourceLocation::ReadVal(D);
>   bool fileScope = D.ReadBool();
> -  Expr* Init = D.ReadOwnedPtr<Expr>();
> +  Expr* Init = D.ReadOwnedPtr<Expr>(C);
>   return new CompoundLiteralExpr(L, Q, Init, fileScope);
> }
>
> @@ -417,7 +417,7 @@
>     S.EmitOwnedPtr(*I);
> }
>
> -CompoundStmt* CompoundStmt::CreateImpl(Deserializer& D) {
> +CompoundStmt* CompoundStmt::CreateImpl(Deserializer& D, ASTContext&  
> C) {
>   SourceLocation LB = SourceLocation::ReadVal(D);
>   SourceLocation RB = SourceLocation::ReadVal(D);
>   unsigned size = D.ReadInt();
> @@ -427,7 +427,7 @@
>   stmt->Body.reserve(size);
>
>   for (unsigned i = 0; i < size; ++i)
> -    stmt->Body.push_back(D.ReadOwnedPtr<Stmt>());
> +    stmt->Body.push_back(D.ReadOwnedPtr<Stmt>(C));
>
>   return stmt;
> }
> @@ -437,10 +437,12 @@
>   S.BatchEmitOwnedPtrs((unsigned) END_EXPR, SubExprs);
> }
>
> -ConditionalOperator* ConditionalOperator::CreateImpl(Deserializer&  
> D) {
> +ConditionalOperator* ConditionalOperator::CreateImpl(Deserializer& D,
> +                                                     ASTContext& C) {
> +
>   QualType t = QualType::ReadVal(D);
>   ConditionalOperator* c = new ConditionalOperator(NULL,NULL,NULL,t);
> -  D.BatchReadOwnedPtrs((unsigned) END_EXPR, c->SubExprs);
> +  D.BatchReadOwnedPtrs((unsigned) END_EXPR, c->SubExprs, C);
>   return c;
> }
>
> @@ -448,7 +450,7 @@
>   S.Emit(ContinueLoc);
> }
>
> -ContinueStmt* ContinueStmt::CreateImpl(Deserializer& D) {
> +ContinueStmt* ContinueStmt::CreateImpl(Deserializer& D, ASTContext&  
> C) {
>   SourceLocation Loc = SourceLocation::ReadVal(D);
>   return new ContinueStmt(Loc);
> }
> @@ -490,7 +492,7 @@
>   }
> }
>
> -DeclRefExpr* DeclRefExpr::CreateImpl(Deserializer& D) {
> +DeclRefExpr* DeclRefExpr::CreateImpl(Deserializer& D, ASTContext&  
> C) {
>   SourceLocation Loc = SourceLocation::ReadVal(D);
>   QualType T = QualType::ReadVal(D);
>   bool OwnsDecl = D.ReadBool();
> @@ -499,14 +501,13 @@
>   if (!OwnsDecl)
>     D.ReadPtr(decl,false); // No backpatching.
>   else
> -    decl = cast<ValueDecl>(D.ReadOwnedPtr<Decl>());
> +    decl = cast<ValueDecl>(D.ReadOwnedPtr<Decl>(C));
>
>   return new DeclRefExpr(decl,T,Loc);
> }
>
> -
> -DeclStmt* DeclStmt::CreateImpl(Deserializer& D) {
> -  ScopedDecl* decl = cast<ScopedDecl>(D.ReadOwnedPtr<Decl>());
> +DeclStmt* DeclStmt::CreateImpl(Deserializer& D, ASTContext& C) {
> +  ScopedDecl* decl = cast<ScopedDecl>(D.ReadOwnedPtr<Decl>(C));
>   SourceLocation StartLoc = SourceLocation::ReadVal(D);
>   SourceLocation EndLoc = SourceLocation::ReadVal(D);
>   return new DeclStmt(decl, StartLoc, EndLoc);
> @@ -518,9 +519,9 @@
>   S.EmitPtr(getNextSwitchCase());
> }
>
> -DefaultStmt* DefaultStmt::CreateImpl(Deserializer& D) {
> +DefaultStmt* DefaultStmt::CreateImpl(Deserializer& D, ASTContext&  
> C) {
>   SourceLocation Loc = SourceLocation::ReadVal(D);
> -  Stmt* SubStmt = D.ReadOwnedPtr<Stmt>();
> +  Stmt* SubStmt = D.ReadOwnedPtr<Stmt>(C);
>
>   DefaultStmt* stmt = new DefaultStmt(Loc,SubStmt);
>   stmt->setNextSwitchCase(D.ReadPtr<SwitchCase>());
> @@ -534,10 +535,10 @@
>   S.EmitOwnedPtr(getBody());
> }
>
> -DoStmt* DoStmt::CreateImpl(Deserializer& D) {
> +DoStmt* DoStmt::CreateImpl(Deserializer& D, ASTContext& C) {
>   SourceLocation DoLoc = SourceLocation::ReadVal(D);
> -  Expr* Cond = D.ReadOwnedPtr<Expr>();
> -  Stmt* Body = D.ReadOwnedPtr<Stmt>();
> +  Expr* Cond = D.ReadOwnedPtr<Expr>(C);
> +  Stmt* Body = D.ReadOwnedPtr<Stmt>(C);
>   return new DoStmt(Body,Cond,DoLoc);
> }
>
> @@ -548,7 +549,7 @@
>   S.Emit(Value);
> }
>
> -FloatingLiteral* FloatingLiteral::CreateImpl(Deserializer& D) {
> +FloatingLiteral* FloatingLiteral::CreateImpl(Deserializer& D,  
> ASTContext& C) {
>   SourceLocation Loc = SourceLocation::ReadVal(D);
>   QualType t = QualType::ReadVal(D);
>   bool isExact = D.ReadBool();
> @@ -565,12 +566,12 @@
>   S.EmitOwnedPtr(getBody());
> }
>
> -ForStmt* ForStmt::CreateImpl(Deserializer& D) {
> +ForStmt* ForStmt::CreateImpl(Deserializer& D, ASTContext& C) {
>   SourceLocation ForLoc = SourceLocation::ReadVal(D);
> -  Stmt* Init = D.ReadOwnedPtr<Stmt>();
> -  Expr* Cond = D.ReadOwnedPtr<Expr>();
> -  Expr* Inc = D.ReadOwnedPtr<Expr>();
> -  Stmt* Body = D.ReadOwnedPtr<Stmt>();
> +  Stmt* Init = D.ReadOwnedPtr<Stmt>(C);
> +  Expr* Cond = D.ReadOwnedPtr<Expr>(C);
> +  Expr* Inc = D.ReadOwnedPtr<Expr>(C);
> +  Stmt* Body = D.ReadOwnedPtr<Stmt>(C);
>   return new ForStmt(Init,Cond,Inc,Body,ForLoc);
> }
>
> @@ -580,7 +581,7 @@
>   S.EmitPtr(Label);
> }
>
> -GotoStmt* GotoStmt::CreateImpl(Deserializer& D) {
> +GotoStmt* GotoStmt::CreateImpl(Deserializer& D, ASTContext& C) {
>   SourceLocation GotoLoc = SourceLocation::ReadVal(D);
>   SourceLocation LabelLoc = SourceLocation::ReadVal(D);
>   GotoStmt* stmt = new GotoStmt(NULL,GotoLoc,LabelLoc);
> @@ -595,11 +596,11 @@
>   S.EmitOwnedPtr(getElse());
> }
>
> -IfStmt* IfStmt::CreateImpl(Deserializer& D) {
> +IfStmt* IfStmt::CreateImpl(Deserializer& D, ASTContext& C) {
>   SourceLocation L = SourceLocation::ReadVal(D);
> -  Expr* Cond = D.ReadOwnedPtr<Expr>();
> -  Stmt* Then = D.ReadOwnedPtr<Stmt>();
> -  Stmt* Else = D.ReadOwnedPtr<Stmt>();
> +  Expr* Cond = D.ReadOwnedPtr<Expr>(C);
> +  Stmt* Then = D.ReadOwnedPtr<Stmt>(C);
> +  Stmt* Else = D.ReadOwnedPtr<Stmt>(C);
>   return new IfStmt(L,Cond,Then,Else);
> }
>
> @@ -608,9 +609,9 @@
>   S.EmitOwnedPtr(Val);
> }
>
> -ImaginaryLiteral* ImaginaryLiteral::CreateImpl(Deserializer& D) {
> +ImaginaryLiteral* ImaginaryLiteral::CreateImpl(Deserializer& D,  
> ASTContext& C) {
>   QualType t = QualType::ReadVal(D);
> -  Expr* expr = D.ReadOwnedPtr<Expr>();
> +  Expr* expr = D.ReadOwnedPtr<Expr>(C);
>   assert (isa<FloatingLiteral>(expr) || isa<IntegerLiteral>(expr));
>   return new ImaginaryLiteral(expr,t);
> }
> @@ -620,9 +621,9 @@
>   S.EmitOwnedPtr(Op);
> }
>
> -ImplicitCastExpr* ImplicitCastExpr::CreateImpl(Deserializer& D) {
> +ImplicitCastExpr* ImplicitCastExpr::CreateImpl(Deserializer& D,  
> ASTContext& C) {
>   QualType t = QualType::ReadVal(D);
> -  Expr* Op = D.ReadOwnedPtr<Expr>();
> +  Expr* Op = D.ReadOwnedPtr<Expr>(C);
>   return new ImplicitCastExpr(t,Op);
> }
>
> @@ -630,8 +631,8 @@
>   S.EmitOwnedPtr(Target);
> }
>
> -IndirectGotoStmt* IndirectGotoStmt::CreateImpl(Deserializer& D) {
> -  Expr* Target = D.ReadOwnedPtr<Expr>();
> +IndirectGotoStmt* IndirectGotoStmt::CreateImpl(Deserializer& D,  
> ASTContext& C) {
> +  Expr* Target = D.ReadOwnedPtr<Expr>(C);
>   return new IndirectGotoStmt(Target);
> }
>
> @@ -642,14 +643,14 @@
>   S.BatchEmitOwnedPtrs(NumInits,InitExprs);
> }
>
> -InitListExpr* InitListExpr::CreateImpl(Deserializer& D) {
> +InitListExpr* InitListExpr::CreateImpl(Deserializer& D, ASTContext&  
> C) {
>   InitListExpr* expr = new InitListExpr();
>   expr->LBraceLoc = SourceLocation::ReadVal(D);
>   expr->RBraceLoc = SourceLocation::ReadVal(D);
>   expr->NumInits = D.ReadInt();
>   assert(expr->NumInits);
>   expr->InitExprs = new Expr*[expr->NumInits];
> -  D.BatchReadOwnedPtrs(expr->NumInits,expr->InitExprs);
> +  D.BatchReadOwnedPtrs(expr->NumInits, expr->InitExprs, C);
>   return expr;
> }
>
> @@ -659,7 +660,7 @@
>   S.Emit(getValue());
> }
>
> -IntegerLiteral* IntegerLiteral::CreateImpl(Deserializer& D) {
> +IntegerLiteral* IntegerLiteral::CreateImpl(Deserializer& D,  
> ASTContext& C) {
>   SourceLocation Loc = SourceLocation::ReadVal(D);
>   QualType T = QualType::ReadVal(D);
>
> @@ -678,10 +679,10 @@
>   S.EmitOwnedPtr(SubStmt);
> }
>
> -LabelStmt* LabelStmt::CreateImpl(Deserializer& D) {
> +LabelStmt* LabelStmt::CreateImpl(Deserializer& D, ASTContext& C) {
>   IdentifierInfo* Label = D.ReadPtr<IdentifierInfo>();
>   SourceLocation IdentLoc = SourceLocation::ReadVal(D);
> -  Stmt* SubStmt = D.ReadOwnedPtr<Stmt>();
> +  Stmt* SubStmt = D.ReadOwnedPtr<Stmt>(C);
>   return new LabelStmt(IdentLoc,Label,SubStmt);
> }
>
> @@ -693,12 +694,12 @@
>   S.EmitOwnedPtr(Base);
> }
>
> -MemberExpr* MemberExpr::CreateImpl(Deserializer& D) {
> +MemberExpr* MemberExpr::CreateImpl(Deserializer& D, ASTContext& C) {
>   SourceLocation L = SourceLocation::ReadVal(D);
>   FieldDecl* MemberDecl = cast<FieldDecl>(D.ReadPtr<Decl>());
>   bool IsArrow = D.ReadBool();
>   QualType T = QualType::ReadVal(D);
> -  Expr* base = D.ReadOwnedPtr<Expr>();
> +  Expr* base = D.ReadOwnedPtr<Expr>(C);
>
>   return new MemberExpr(base,IsArrow,MemberDecl,L,T);
> }
> @@ -707,7 +708,7 @@
>   S.Emit(SemiLoc);
> }
>
> -NullStmt* NullStmt::CreateImpl(Deserializer& D) {
> +NullStmt* NullStmt::CreateImpl(Deserializer& D, ASTContext& C) {
>   SourceLocation SemiLoc = SourceLocation::ReadVal(D);
>   return new NullStmt(SemiLoc);
> }
> @@ -718,10 +719,10 @@
>   S.EmitOwnedPtr(Val);
> }
>
> -ParenExpr* ParenExpr::CreateImpl(Deserializer& D) {
> +ParenExpr* ParenExpr::CreateImpl(Deserializer& D, ASTContext& C) {
>   SourceLocation L = SourceLocation::ReadVal(D);
>   SourceLocation R = SourceLocation::ReadVal(D);
> -  Expr* val = D.ReadOwnedPtr<Expr>();
> +  Expr* val = D.ReadOwnedPtr<Expr>(C);
>   return new ParenExpr(L,R,val);
> }
>
> @@ -731,7 +732,7 @@
>   S.Emit(getType());
> }
>
> -PreDefinedExpr* PreDefinedExpr::CreateImpl(Deserializer& D) {
> +PreDefinedExpr* PreDefinedExpr::CreateImpl(Deserializer& D,  
> ASTContext& C) {
>   SourceLocation Loc = SourceLocation::ReadVal(D);
>   IdentType it = static_cast<IdentType>(D.ReadInt());
>   QualType Q = QualType::ReadVal(D);
> @@ -743,9 +744,9 @@
>   S.EmitOwnedPtr(RetExpr);
> }
>
> -ReturnStmt* ReturnStmt::CreateImpl(Deserializer& D) {
> +ReturnStmt* ReturnStmt::CreateImpl(Deserializer& D, ASTContext& C) {
>   SourceLocation RetLoc = SourceLocation::ReadVal(D);
> -  Expr* RetExpr = D.ReadOwnedPtr<Expr>();
> +  Expr* RetExpr = D.ReadOwnedPtr<Expr>(C);
>   return new ReturnStmt(RetLoc,RetExpr);
> }
>
> @@ -757,7 +758,7 @@
>   S.Emit(RParenLoc);
> }
>
> -SizeOfAlignOfTypeExpr*  
> SizeOfAlignOfTypeExpr::CreateImpl(Deserializer& D) {
> +SizeOfAlignOfTypeExpr*  
> SizeOfAlignOfTypeExpr::CreateImpl(Deserializer& D, ASTContext& C) {
>   bool isSizeof = D.ReadBool();
>   QualType Ty = QualType::ReadVal(D);
>   QualType Res = QualType::ReadVal(D);
> @@ -774,11 +775,11 @@
>   S.EmitOwnedPtr(SubStmt);
> }
>
> -StmtExpr* StmtExpr::CreateImpl(Deserializer& D) {
> +StmtExpr* StmtExpr::CreateImpl(Deserializer& D, ASTContext& C) {
>   QualType t = QualType::ReadVal(D);
>   SourceLocation L = SourceLocation::ReadVal(D);
>   SourceLocation R = SourceLocation::ReadVal(D);
> -  CompoundStmt* SubStmt = cast<CompoundStmt>(D.ReadOwnedPtr<Stmt>());
> +  CompoundStmt* SubStmt =  
> cast<CompoundStmt>(D.ReadOwnedPtr<Stmt>(C));
>   return new StmtExpr(SubStmt,t,L,R);
> }
>
> @@ -793,7 +794,7 @@
>     S.EmitInt(StrData[i]);
> }
>
> -StringLiteral* StringLiteral::CreateImpl(Deserializer& D) {
> +StringLiteral* StringLiteral::CreateImpl(Deserializer& D,  
> ASTContext& C) {
>   QualType t = QualType::ReadVal(D);
>   SourceLocation firstTokLoc = SourceLocation::ReadVal(D);
>   SourceLocation lastTokLoc = SourceLocation::ReadVal(D);
> @@ -819,10 +820,10 @@
>   S.EmitPtr(FirstCase);
> }
>
> -SwitchStmt* SwitchStmt::CreateImpl(Deserializer& D) {
> +SwitchStmt* SwitchStmt::CreateImpl(Deserializer& D, ASTContext& C) {
>   SourceLocation Loc = SourceLocation::ReadVal(D);
> -  Stmt* Cond = D.ReadOwnedPtr<Stmt>();
> -  Stmt* Body = D.ReadOwnedPtr<Stmt>();
> +  Stmt* Cond = D.ReadOwnedPtr<Stmt>(C);
> +  Stmt* Body = D.ReadOwnedPtr<Stmt>(C);
>   SwitchCase* FirstCase = cast<SwitchCase>(D.ReadPtr<Stmt>());
>
>   SwitchStmt* stmt = new SwitchStmt(cast<Expr>(Cond));
> @@ -839,11 +840,11 @@
>   S.EmitOwnedPtr(Val);
> }
>
> -UnaryOperator* UnaryOperator::CreateImpl(Deserializer& D) {
> +UnaryOperator* UnaryOperator::CreateImpl(Deserializer& D,  
> ASTContext& C) {
>   QualType t = QualType::ReadVal(D);
>   SourceLocation L = SourceLocation::ReadVal(D);
>   Opcode Opc = static_cast<Opcode>(D.ReadInt());
> -  Expr* Val = D.ReadOwnedPtr<Expr>();
> +  Expr* Val = D.ReadOwnedPtr<Expr>(C);
>   return new UnaryOperator(Val,Opc,t,L);
> }
>
> @@ -853,10 +854,10 @@
>   S.EmitOwnedPtr(getBody());
> }
>
> -WhileStmt* WhileStmt::CreateImpl(Deserializer& D) {
> +WhileStmt* WhileStmt::CreateImpl(Deserializer& D, ASTContext& C) {
>   SourceLocation WhileLoc = SourceLocation::ReadVal(D);
> -  Expr* Cond = D.ReadOwnedPtr<Expr>();
> -  Stmt* Body = D.ReadOwnedPtr<Stmt>();
> +  Expr* Cond = D.ReadOwnedPtr<Expr>(C);
> +  Stmt* Body = D.ReadOwnedPtr<Stmt>(C);
>   return new WhileStmt(Cond,Body,WhileLoc);
> }
>
> @@ -870,12 +871,12 @@
>   S.BatchEmitOwnedPtrs((unsigned) END_EXPR, &SubExprs[0]);
> }
>
> -ObjCAtCatchStmt* ObjCAtCatchStmt::CreateImpl(Deserializer& D) {
> +ObjCAtCatchStmt* ObjCAtCatchStmt::CreateImpl(Deserializer& D,  
> ASTContext& C) {
>   SourceLocation AtCatchLoc = SourceLocation::ReadVal(D);
>   SourceLocation RParenLoc = SourceLocation::ReadVal(D);
>
>   ObjCAtCatchStmt* stmt = new ObjCAtCatchStmt(AtCatchLoc,RParenLoc);
> -  D.BatchReadOwnedPtrs((unsigned) END_EXPR, &stmt->SubExprs[0]);
> +  D.BatchReadOwnedPtrs((unsigned) END_EXPR, &stmt->SubExprs[0], C);
>
>   return stmt;
> }
> @@ -885,9 +886,9 @@
>   S.EmitOwnedPtr(AtFinallyStmt);
> }
>
> -ObjCAtFinallyStmt* ObjCAtFinallyStmt::CreateImpl(Deserializer& D) {
> +ObjCAtFinallyStmt* ObjCAtFinallyStmt::CreateImpl(Deserializer& D,  
> ASTContext& C) {
>   SourceLocation Loc = SourceLocation::ReadVal(D);
> -  Stmt* AtFinallyStmt = D.ReadOwnedPtr<Stmt>();
> +  Stmt* AtFinallyStmt = D.ReadOwnedPtr<Stmt>(C);
>   return new ObjCAtFinallyStmt(Loc,AtFinallyStmt);
> }
>
> @@ -896,10 +897,12 @@
>   S.BatchEmitOwnedPtrs((unsigned) END_EXPR,&SubStmts[0]);
>  }
>
> -ObjCAtSynchronizedStmt*  
> ObjCAtSynchronizedStmt::CreateImpl(Deserializer& D) {
> +ObjCAtSynchronizedStmt*  
> ObjCAtSynchronizedStmt::CreateImpl(Deserializer& D,
> +                                                            
> ASTContext& C) {
> +
>   SourceLocation L = SourceLocation::ReadVal(D);
>   ObjCAtSynchronizedStmt* stmt = new ObjCAtSynchronizedStmt(L,0,0);
> -  D.BatchReadOwnedPtrs((unsigned) END_EXPR, &stmt->SubStmts[0]);
> +  D.BatchReadOwnedPtrs((unsigned) END_EXPR, &stmt->SubStmts[0], C);
>   return stmt;
> }
>
> @@ -908,9 +911,9 @@
>   S.EmitOwnedPtr(Throw);
> }
>
> -ObjCAtThrowStmt* ObjCAtThrowStmt::CreateImpl(Deserializer& D) {
> +ObjCAtThrowStmt* ObjCAtThrowStmt::CreateImpl(Deserializer& D,  
> ASTContext& C) {
>   SourceLocation L = SourceLocation::ReadVal(D);
> -  Stmt* Throw = D.ReadOwnedPtr<Stmt>();
> +  Stmt* Throw = D.ReadOwnedPtr<Stmt>(C);
>   return new ObjCAtThrowStmt(L,Throw);
> }
>
> @@ -919,10 +922,10 @@
>   S.BatchEmitOwnedPtrs((unsigned) END_EXPR, &SubStmts[0]);
> }
>
> -ObjCAtTryStmt* ObjCAtTryStmt::CreateImpl(Deserializer& D) {
> +ObjCAtTryStmt* ObjCAtTryStmt::CreateImpl(Deserializer& D,  
> ASTContext& C) {
>   SourceLocation L = SourceLocation::ReadVal(D);
>   ObjCAtTryStmt* stmt = new ObjCAtTryStmt(L,NULL,NULL,NULL);
> -  D.BatchReadOwnedPtrs((unsigned) END_EXPR, &stmt->SubStmts[0]);
> +  D.BatchReadOwnedPtrs((unsigned) END_EXPR, &stmt->SubStmts[0], C);
>   return stmt;
> }
>
> @@ -933,7 +936,7 @@
>   S.Emit(EncType);
> }
>
> -ObjCEncodeExpr* ObjCEncodeExpr::CreateImpl(Deserializer& D) {
> +ObjCEncodeExpr* ObjCEncodeExpr::CreateImpl(Deserializer& D,  
> ASTContext& C) {
>   SourceLocation AtLoc = SourceLocation::ReadVal(D);
>   SourceLocation RParenLoc = SourceLocation::ReadVal(D);
>   QualType T = QualType::ReadVal(D);
> @@ -947,13 +950,13 @@
>   S.BatchEmitOwnedPtrs(getElement(),getCollection(),getBody());
> }
>
> -ObjCForCollectionStmt*  
> ObjCForCollectionStmt::CreateImpl(Deserializer& D) {
> +ObjCForCollectionStmt*  
> ObjCForCollectionStmt::CreateImpl(Deserializer& D, ASTContext& C) {
>   SourceLocation ForLoc = SourceLocation::ReadVal(D);
>   SourceLocation RParenLoc = SourceLocation::ReadVal(D);
>   Stmt* Element;
>   Expr* Collection;
>   Stmt* Body;
> -  D.BatchReadOwnedPtrs(Element,Collection,Body);
> +  D.BatchReadOwnedPtrs(Element, Collection, Body, C);
>   return new ObjCForCollectionStmt(Element,Collection,Body,ForLoc,  
> RParenLoc);
> }
>
> @@ -963,7 +966,7 @@
>   S.EmitPtr(getDecl());
> }
>
> -ObjCIvarRefExpr* ObjCIvarRefExpr::CreateImpl(Deserializer& D) {
> +ObjCIvarRefExpr* ObjCIvarRefExpr::CreateImpl(Deserializer& D,  
> ASTContext& C) {
>   SourceLocation Loc = SourceLocation::ReadVal(D);
>   QualType T = QualType::ReadVal(D);
>   ObjCIvarRefExpr* dr = new ObjCIvarRefExpr(NULL,T,Loc);
> @@ -978,7 +981,7 @@
>   S.Emit(SelName);
> }
>
> -ObjCSelectorExpr* ObjCSelectorExpr::CreateImpl(Deserializer& D) {
> +ObjCSelectorExpr* ObjCSelectorExpr::CreateImpl(Deserializer& D,  
> ASTContext& C) {
>   SourceLocation AtLoc = SourceLocation::ReadVal(D);
>   SourceLocation RParenLoc = SourceLocation::ReadVal(D);
>   QualType T = QualType::ReadVal(D);
> @@ -993,9 +996,9 @@
>   S.EmitOwnedPtr(String);
> }
>
> -ObjCStringLiteral* ObjCStringLiteral::CreateImpl(Deserializer& D) {
> +ObjCStringLiteral* ObjCStringLiteral::CreateImpl(Deserializer& D,  
> ASTContext& C) {
>   SourceLocation L = SourceLocation::ReadVal(D);
>   QualType T = QualType::ReadVal(D);
> -  StringLiteral* String =  
> cast<StringLiteral>(D.ReadOwnedPtr<Stmt>());
> +  StringLiteral* String =  
> cast<StringLiteral>(D.ReadOwnedPtr<Stmt>(C));
>   return new ObjCStringLiteral(String,T,L);
> }
>
> Modified: cfe/trunk/lib/AST/TranslationUnit.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/TranslationUnit.cpp?rev=49353&r1=49352&r2=49353&view=diff
>
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- cfe/trunk/lib/AST/TranslationUnit.cpp (original)
> +++ cfe/trunk/lib/AST/TranslationUnit.cpp Mon Apr  7 16:55:54 2008
> @@ -221,7 +221,7 @@
>   llvm::Deserializer::Location DeclBlockLoc =  
> Dezr.getCurrentBlockLocation();
>
>   while (!Dezr.FinishedBlock(DeclBlockLoc))
> -    TU->AddTopLevelDecl(Dezr.ReadOwnedPtr<Decl>());
> +    TU->AddTopLevelDecl(Dezr.ReadOwnedPtr<Decl>(*TU->Context));
>
>   return TU;
> }
>
> Modified: cfe/trunk/lib/AST/TypeSerialization.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/TypeSerialization.cpp?rev=49353&r1=49352&r2=49353&view=diff
>
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- cfe/trunk/lib/AST/TypeSerialization.cpp (original)
> +++ cfe/trunk/lib/AST/TypeSerialization.cpp Mon Apr  7 16:55:54 2008
> @@ -229,7 +229,7 @@
>   Types.push_back(T);
>
>   // Deserialize the decl.
> -  T->decl = cast<TagDecl>(D.ReadOwnedPtr<Decl>());
> +  T->decl = cast<TagDecl>(D.ReadOwnedPtr<Decl>(Context));
>
>   return T;
> }
> @@ -269,7 +269,7 @@
>   QualType ElTy = QualType::ReadVal(D);
>   ArraySizeModifier am = static_cast<ArraySizeModifier>(D.ReadInt());
>   unsigned ITQ = D.ReadInt();
> -  Expr* SizeExpr = D.ReadOwnedPtr<Expr>();
> +  Expr* SizeExpr = D.ReadOwnedPtr<Expr>(Context);
>
>   return  
> Context.getVariableArrayType(ElTy,SizeExpr,am,ITQ).getTypePtr();
> }
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits




More information about the cfe-commits mailing list