From 370187c8a3e96517c943329f2511737a04b85450 Mon Sep 17 00:00:00 2001 From: Douglas Gregor Date: Wed, 22 Apr 2009 21:45:53 +0000 Subject: [PATCH] Remove the serialization code that predates precompiled headers. Future approaches to (de-)serializing ASTs will be based on the PCH infrastructure. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@69828 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/AST/ASTContext.h | 17 - include/clang/AST/Decl.h | 138 --- include/clang/AST/DeclBase.h | 18 - include/clang/AST/DeclCXX.h | 65 +- include/clang/AST/DeclGroup.h | 13 - include/clang/AST/DeclTemplate.h | 29 - include/clang/AST/DeclarationName.h | 1 - include/clang/AST/Expr.h | 101 -- include/clang/AST/ExprCXX.h | 59 - include/clang/AST/ExprObjC.h | 28 - include/clang/AST/Stmt.h | 86 -- include/clang/AST/Type.h | 132 -- include/clang/Basic/FileManager.h | 1 - include/clang/Basic/IdentifierTable.h | 33 - include/clang/Basic/LangOptions.h | 8 - include/clang/Basic/SourceLocation.h | 13 - include/clang/Basic/SourceManager.h | 18 - lib/AST/ASTContext.cpp | 178 --- lib/AST/CMakeLists.txt | 3 - lib/AST/DeclGroup.cpp | 37 - lib/AST/DeclSerialization.cpp | 695 ----------- lib/AST/DeclarationName.cpp | 3 +- lib/AST/StmtSerialization.cpp | 1602 ------------------------- lib/AST/TypeSerialization.cpp | 490 -------- lib/Basic/CMakeLists.txt | 1 - lib/Basic/FileManager.cpp | 2 - lib/Basic/IdentifierTable.cpp | 159 --- lib/Basic/LangOptions.cpp | 60 - lib/Basic/SourceLocation.cpp | 22 - lib/Basic/SourceManager.cpp | 134 +-- tools/clang-cc/ASTConsumers.cpp | 141 --- tools/clang-cc/ASTConsumers.h | 7 - tools/clang-cc/CMakeLists.txt | 1 - tools/clang-cc/SerializationTest.cpp | 226 ---- tools/clang-cc/clang-cc.cpp | 82 +- 35 files changed, 8 insertions(+), 4595 deletions(-) delete mode 100644 lib/AST/DeclSerialization.cpp delete mode 100644 lib/AST/StmtSerialization.cpp delete mode 100644 lib/AST/TypeSerialization.cpp delete mode 100644 lib/Basic/LangOptions.cpp delete mode 100644 tools/clang-cc/SerializationTest.cpp diff --git a/include/clang/AST/ASTContext.h b/include/clang/AST/ASTContext.h index bba9cfb400..f49b56c62f 100644 --- a/include/clang/AST/ASTContext.h +++ b/include/clang/AST/ASTContext.h @@ -25,7 +25,6 @@ #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/FoldingSet.h" #include "llvm/ADT/OwningPtr.h" -#include "llvm/Bitcode/SerializationFwd.h" #include "llvm/Support/Allocator.h" #include @@ -167,11 +166,6 @@ public: TranslationUnitDecl *getTranslationUnitDecl() const { return TUDecl; } - /// This is intentionally not serialized. It is populated by the - /// ASTContext ctor, and there are no external pointers/references to - /// internal variables of BuiltinInfo. - // FIXME: PCH does serialize this information, so that we don't have to - // construct it again when the PCH is loaded. Builtin::Context BuiltinInfo; // Builtin Types. @@ -699,17 +693,6 @@ public: const_type_iterator types_begin() const { return Types.begin(); } const_type_iterator types_end() const { return Types.end(); } - //===--------------------------------------------------------------------===// - // Serialization - //===--------------------------------------------------------------------===// - - void EmitASTBitcodeBuffer(std::vector &Buffer) const; - static ASTContext *ReadASTBitcodeBuffer(llvm::MemoryBuffer &MBuffer, - FileManager &FMgr); - - void Emit(llvm::Serializer& S) const; - static ASTContext *Create(llvm::Deserializer& D); - //===--------------------------------------------------------------------===// // Integer Values //===--------------------------------------------------------------------===// diff --git a/include/clang/AST/Decl.h b/include/clang/AST/Decl.h index 29112b9045..a573c48af3 100644 --- a/include/clang/AST/Decl.h +++ b/include/clang/AST/Decl.h @@ -25,10 +25,6 @@ class CompoundStmt; class StringLiteral; /// TranslationUnitDecl - The top declaration context. -/// FIXME: The TranslationUnit class should probably be modified to serve as -/// the top decl context. It would have ownership of the top decls so that the -/// AST is self-contained and easily de/serializable. -/// FIXME: TranslationUnitDecl isn't really a Decl (!) class TranslationUnitDecl : public Decl, public DeclContext { TranslationUnitDecl() : Decl(TranslationUnit, 0, SourceLocation()), @@ -44,15 +40,6 @@ public: static TranslationUnitDecl *castFromDeclContext(const DeclContext *DC) { return static_cast(const_cast(DC)); } - -protected: - /// EmitImpl - Serialize this TranslationUnitDecl. Called by Decl::Emit. - virtual void EmitImpl(llvm::Serializer& S) const; - - /// CreateImpl - Deserialize a TranslationUnitDecl. Called by Decl::Create. - static TranslationUnitDecl* CreateImpl(llvm::Deserializer& D, ASTContext& C); - - friend Decl* Decl::Create(llvm::Deserializer& D, ASTContext& C); }; /// NamedDecl - This represents a decl with a name. Many decls have names such @@ -120,10 +107,6 @@ public: return D->getKind() >= NamedFirst && D->getKind() <= NamedLast; } static bool classof(const NamedDecl *D) { return true; } - -protected: - void EmitInRec(llvm::Serializer& S) const; - void ReadInRec(llvm::Deserializer& D, ASTContext& C); }; /// NamespaceDecl - Represent a C++ namespace. @@ -179,15 +162,6 @@ public: static NamespaceDecl *castFromDeclContext(const DeclContext *DC) { return static_cast(const_cast(DC)); } - -protected: - /// EmitImpl - Serialize this NamespaceDecl. Called by Decl::Emit. - virtual void EmitImpl(llvm::Serializer& S) const; - - /// CreateImpl - Deserialize a NamespaceDecl. Called by Decl::Create. - static NamespaceDecl* CreateImpl(llvm::Deserializer& D, ASTContext& C); - - friend Decl* Decl::Create(llvm::Deserializer& D, ASTContext& C); }; /// ValueDecl - Represent the declaration of a variable (in which case it is @@ -209,10 +183,6 @@ public: return D->getKind() >= ValueFirst && D->getKind() <= ValueLast; } static bool classof(const ValueDecl *D) { return true; } - -protected: - void EmitInRec(llvm::Serializer& S) const; - void ReadInRec(llvm::Deserializer& D, ASTContext& C); }; /// VarDecl - An instance of this class is created to represent a variable @@ -393,22 +363,6 @@ public: return D->getKind() >= VarFirst && D->getKind() <= VarLast; } static bool classof(const VarDecl *D) { return true; } - -protected: - void EmitInRec(llvm::Serializer& S) const; - void ReadInRec(llvm::Deserializer& D, ASTContext& C); - - void EmitOutRec(llvm::Serializer& S) const; - 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& D, ASTContext& C); - - /// CreateImpl - Deserialize a VarDecl. Called by Decl::Create. - static VarDecl* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; class ImplicitParamDecl : public VarDecl { @@ -492,15 +446,6 @@ public: D->getKind() == OriginalParmVar); } static bool classof(const ParmVarDecl *D) { return true; } - -protected: - /// EmitImpl - Serialize this ParmVarDecl. Called by Decl::Emit. - virtual void EmitImpl(llvm::Serializer& S) const; - - /// CreateImpl - Deserialize a ParmVarDecl. Called by Decl::Create. - static ParmVarDecl* CreateImpl(llvm::Deserializer& D, ASTContext& C); - - friend Decl* Decl::Create(llvm::Deserializer& D, ASTContext& C); }; /// OriginalParmVarDecl - Represent a parameter to a function, when @@ -528,18 +473,6 @@ public: // Implement isa/cast/dyncast/etc. static bool classof(const Decl *D) { return D->getKind() == OriginalParmVar; } static bool classof(const OriginalParmVarDecl *D) { return true; } - -protected: - /// EmitImpl - Serialize this OriginalParmVarDecl. - /// Called by Decl::Emit. - virtual void EmitImpl(llvm::Serializer& S) const; - - /// CreateImpl - Deserialize a OriginalParmVarDecl. - /// Called by Decl::Create. - static OriginalParmVarDecl* CreateImpl(llvm::Deserializer& D, - ASTContext& C); - - friend Decl* Decl::Create(llvm::Deserializer& D, ASTContext& C); }; /// FunctionDecl - An instance of this class is created to represent a @@ -765,16 +698,6 @@ public: static FunctionDecl *castFromDeclContext(const DeclContext *DC) { return static_cast(const_cast(DC)); } - -protected: - /// EmitImpl - Serialize this FunctionDecl. Called by Decl::Emit. - virtual void EmitImpl(llvm::Serializer& S) const; - - /// CreateImpl - Deserialize a FunctionDecl. Called by Decl::Create. - static FunctionDecl* CreateImpl(llvm::Deserializer& D, ASTContext& C); - - friend Decl* Decl::Create(llvm::Deserializer& D, ASTContext& C); - friend class CXXRecordDecl; }; @@ -821,15 +744,6 @@ public: return D->getKind() >= FieldFirst && D->getKind() <= FieldLast; } static bool classof(const FieldDecl *D) { return true; } - -protected: - /// EmitImpl - Serialize this FieldDecl. Called by Decl::Emit. - virtual void EmitImpl(llvm::Serializer& S) const; - - /// CreateImpl - Deserialize a FieldDecl. Called by Decl::Create. - static FieldDecl* CreateImpl(llvm::Deserializer& D, ASTContext& C); - - friend Decl* Decl::Create(llvm::Deserializer& D, ASTContext& C); }; /// EnumConstantDecl - An instance of this object exists for each enum constant @@ -867,15 +781,6 @@ public: static bool classof(const EnumConstantDecl *D) { return true; } friend class StmtIteratorBase; - -protected: - /// EmitImpl - Serialize this EnumConstantDecl. Called by Decl::Emit. - virtual void EmitImpl(llvm::Serializer& S) const; - - /// CreateImpl - Deserialize a EnumConstantDecl. Called by Decl::Create. - static EnumConstantDecl* CreateImpl(llvm::Deserializer& D, ASTContext& C); - - friend Decl* Decl::Create(llvm::Deserializer& D, ASTContext& C); }; @@ -932,15 +837,6 @@ public: // Implement isa/cast/dyncast/etc. static bool classof(const Decl *D) { return D->getKind() == Typedef; } static bool classof(const TypedefDecl *D) { return true; } - -protected: - /// EmitImpl - Serialize this TypedefDecl. Called by Decl::Emit. - virtual void EmitImpl(llvm::Serializer& S) const; - - /// CreateImpl - Deserialize a TypedefDecl. Called by Decl::Create. - static TypedefDecl* CreateImpl(llvm::Deserializer& D, ASTContext& C); - - friend Decl* Decl::Create(llvm::Deserializer& D, ASTContext& C); }; class TypedefDecl; @@ -1090,15 +986,6 @@ public: static bool classof(const Decl *D) { return D->getKind() == Enum; } static bool classof(const EnumDecl *D) { return true; } - -protected: - /// EmitImpl - Serialize this EnumDecl. Called by Decl::Emit. - virtual void EmitImpl(llvm::Serializer& S) const; - - /// CreateImpl - Deserialize a EnumDecl. Called by Decl::Create. - static EnumDecl* CreateImpl(llvm::Deserializer& D, ASTContext& C); - - friend Decl* Decl::Create(llvm::Deserializer& D, ASTContext& C); }; @@ -1202,14 +1089,6 @@ public: return D->getKind() >= RecordFirst && D->getKind() <= RecordLast; } static bool classof(const RecordDecl *D) { return true; } -protected: - /// EmitImpl - Serialize this RecordDecl. Called by Decl::Emit. - virtual void EmitImpl(llvm::Serializer& S) const; - - /// CreateImpl - Deserialize a RecordDecl. Called by Decl::Create. - static RecordDecl* CreateImpl(llvm::Deserializer& D, ASTContext& C); - - friend Decl* Decl::Create(llvm::Deserializer& D, ASTContext& C); }; class FileScopeAsmDecl : public Decl { @@ -1228,14 +1107,6 @@ public: return D->getKind() == FileScopeAsm; } static bool classof(const FileScopeAsmDecl *D) { return true; } -protected: - /// EmitImpl - Serialize this FileScopeAsmDecl. Called by Decl::Emit. - virtual void EmitImpl(llvm::Serializer& S) const; - - /// CreateImpl - Deserialize a FileScopeAsmDecl. Called by Decl::Create. - static FileScopeAsmDecl* CreateImpl(llvm::Deserializer& D, ASTContext& C); - - friend Decl* Decl::Create(llvm::Deserializer& D, ASTContext& C); }; /// BlockDecl - This represents a block literal declaration, which is like an @@ -1300,15 +1171,6 @@ public: static BlockDecl *castFromDeclContext(const DeclContext *DC) { return static_cast(const_cast(DC)); } - -protected: - /// EmitImpl - Serialize this BlockDecl. Called by Decl::Emit. - virtual void EmitImpl(llvm::Serializer& S) const; - - /// CreateImpl - Deserialize a BlockDecl. Called by Decl::Create. - static BlockDecl* CreateImpl(llvm::Deserializer& D, ASTContext& C); - - friend Decl* Decl::Create(llvm::Deserializer& D, ASTContext& C); }; /// Insertion operator for diagnostics. This allows sending NamedDecl's diff --git a/include/clang/AST/DeclBase.h b/include/clang/AST/DeclBase.h index 434780baa0..c525be996e 100644 --- a/include/clang/AST/DeclBase.h +++ b/include/clang/AST/DeclBase.h @@ -297,22 +297,9 @@ public: static DeclContext *castToDeclContext(const Decl *); static Decl *castFromDeclContext(const DeclContext *); - /// Emit - Serialize this Decl to Bitcode. - void Emit(llvm::Serializer& S) const; - - /// Create - Deserialize a Decl from Bitcode. - static Decl* Create(llvm::Deserializer& D, ASTContext& C); - /// Destroy - Call destructors and release memory. virtual void Destroy(ASTContext& C); -protected: - /// EmitImpl - Provides the subclass-specific serialization logic for - /// serializing out a decl. - virtual void EmitImpl(llvm::Serializer& S) const { - // FIXME: This will eventually be a pure virtual function. - assert (false && "Not implemented."); - } private: const Attr *getAttrsImpl() const; @@ -800,11 +787,6 @@ private: void buildLookup(ASTContext &Context, DeclContext *DCtx); void makeDeclVisibleInContextImpl(ASTContext &Context, NamedDecl *D); - - void EmitOutRec(llvm::Serializer& S) const; - void ReadOutRec(llvm::Deserializer& D, ASTContext& C); - - friend class Decl; }; inline bool Decl::isTemplateParameter() const { diff --git a/include/clang/AST/DeclCXX.h b/include/clang/AST/DeclCXX.h index 5ac9be07f5..b81871ace2 100644 --- a/include/clang/AST/DeclCXX.h +++ b/include/clang/AST/DeclCXX.h @@ -44,7 +44,11 @@ protected: /// Functions - the set of overloaded functions contained in this /// overload set. llvm::SmallVector Functions; - + + // FIXME: This should go away when we stop using + // OverloadedFunctionDecl to store conversions in CXXRecordDecl. + friend class CXXRecordDecl; + public: typedef llvm::SmallVector::iterator function_iterator; typedef llvm::SmallVector::const_iterator @@ -97,18 +101,6 @@ public: return D->getKind() == OverloadedFunction; } static bool classof(const OverloadedFunctionDecl *D) { return true; } - -protected: - /// EmitImpl - Serialize this FunctionDecl. Called by Decl::Emit. - virtual void EmitImpl(llvm::Serializer& S) const; - - /// CreateImpl - Deserialize an OverloadedFunctionDecl. Called by - /// Decl::Create. - static OverloadedFunctionDecl* CreateImpl(llvm::Deserializer& D, - ASTContext& C); - - friend Decl* Decl::Create(llvm::Deserializer& D, ASTContext& C); - friend class CXXRecordDecl; }; /// CXXBaseSpecifier - A base class of a C++ class. @@ -458,17 +450,6 @@ public: static bool classof(const ClassTemplateSpecializationDecl *D) { return true; } - -protected: - /// EmitImpl - Serialize this CXXRecordDecl. Called by Decl::Emit. - // FIXME: Implement this. - //virtual void EmitImpl(llvm::Serializer& S) const; - - /// CreateImpl - Deserialize a CXXRecordDecl. Called by Decl::Create. - // FIXME: Implement this. - static CXXRecordDecl* CreateImpl(Kind DK, llvm::Deserializer& D, ASTContext& C); - - friend Decl* Decl::Create(llvm::Deserializer& D, ASTContext& C); }; /// CXXMethodDecl - Represents a static or instance method of a @@ -520,17 +501,6 @@ public: return D->getKind() >= CXXMethod && D->getKind() <= CXXConversion; } static bool classof(const CXXMethodDecl *D) { return true; } - -protected: - /// EmitImpl - Serialize this CXXMethodDecl. Called by Decl::Emit. - // FIXME: Implement this. - //virtual void EmitImpl(llvm::Serializer& S) const; - - /// CreateImpl - Deserialize a CXXMethodDecl. Called by Decl::Create. - // FIXME: Implement this. - static CXXMethodDecl* CreateImpl(llvm::Deserializer& D, ASTContext& C); - - friend Decl* Decl::Create(llvm::Deserializer& D, ASTContext& C); }; /// CXXBaseOrMemberInitializer - Represents a C++ base or member @@ -727,13 +697,6 @@ public: return D->getKind() == CXXConstructor; } static bool classof(const CXXConstructorDecl *D) { return true; } - /// EmitImpl - Serialize this CXXConstructorDecl. Called by Decl::Emit. - // FIXME: Implement this. - //virtual void EmitImpl(llvm::Serializer& S) const; - - /// CreateImpl - Deserialize a CXXConstructorDecl. Called by Decl::Create. - // FIXME: Implement this. - static CXXConstructorDecl* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// CXXDestructorDecl - Represents a C++ destructor within a @@ -791,13 +754,6 @@ public: return D->getKind() == CXXDestructor; } static bool classof(const CXXDestructorDecl *D) { return true; } - /// EmitImpl - Serialize this CXXDestructorDecl. Called by Decl::Emit. - // FIXME: Implement this. - //virtual void EmitImpl(llvm::Serializer& S) const; - - /// CreateImpl - Deserialize a CXXDestructorDecl. Called by Decl::Create. - // FIXME: Implement this. - static CXXDestructorDecl* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// CXXConversionDecl - Represents a C++ conversion function within a @@ -843,13 +799,6 @@ public: return D->getKind() == CXXConversion; } static bool classof(const CXXConversionDecl *D) { return true; } - /// EmitImpl - Serialize this CXXConversionDecl. Called by Decl::Emit. - // FIXME: Implement this. - //virtual void EmitImpl(llvm::Serializer& S) const; - - /// CreateImpl - Deserialize a CXXConversionDecl. Called by Decl::Create. - // FIXME: Implement this. - static CXXConversionDecl* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// LinkageSpecDecl - This represents a linkage specification. For example: @@ -897,10 +846,6 @@ public: static LinkageSpecDecl *castFromDeclContext(const DeclContext *DC) { return static_cast(const_cast(DC)); } - -protected: - void EmitInRec(llvm::Serializer& S) const; - void ReadInRec(llvm::Deserializer& D, ASTContext& C); }; /// UsingDirectiveDecl - Represents C++ using-directive. For example: diff --git a/include/clang/AST/DeclGroup.h b/include/clang/AST/DeclGroup.h index 65666899e2..15a8adef8e 100644 --- a/include/clang/AST/DeclGroup.h +++ b/include/clang/AST/DeclGroup.h @@ -15,7 +15,6 @@ #define LLVM_CLANG_AST_DECLGROUP_H #include "llvm/Support/DataTypes.h" -#include "llvm/Bitcode/SerializationFwd.h" #include namespace clang { @@ -48,12 +47,6 @@ public: assert (i < NumDecls && "Out-of-bounds access."); return *((Decl* const*) (this+1)); } - - /// Emit - Serialize a DeclGroup to Bitcode. - void Emit(llvm::Serializer& S) const; - - /// Read - Deserialize a DeclGroup from Bitcode. - static DeclGroup* Read(llvm::Deserializer& D, ASTContext& C); }; class DeclGroupRef { @@ -136,12 +129,6 @@ public: X.D = static_cast(Ptr); return X; } - - /// Emit - Serialize a DeclGroupRef to Bitcode. - void Emit(llvm::Serializer& S) const; - - /// Read - Deserialize a DeclGroupRef from Bitcode. - static DeclGroupRef ReadVal(llvm::Deserializer& D); }; } // end clang namespace diff --git a/include/clang/AST/DeclTemplate.h b/include/clang/AST/DeclTemplate.h index 794ab2cf08..5036127d3f 100644 --- a/include/clang/AST/DeclTemplate.h +++ b/include/clang/AST/DeclTemplate.h @@ -271,15 +271,6 @@ public: return D->getKind() == TemplateTypeParm; } static bool classof(const TemplateTypeParmDecl *D) { return true; } - -protected: - /// Serialize this TemplateTypeParmDecl. Called by Decl::Emit. - virtual void EmitImpl(llvm::Serializer& S) const; - - /// Deserialize a TemplateTypeParmDecl. Called by Decl::Create. - static TemplateTypeParmDecl* CreateImpl(llvm::Deserializer& D, ASTContext& C); - - friend Decl* Decl::Create(llvm::Deserializer& D, ASTContext& C); }; /// NonTypeTemplateParmDecl - Declares a non-type template parameter, @@ -328,16 +319,6 @@ public: return D->getKind() == NonTypeTemplateParm; } static bool classof(const NonTypeTemplateParmDecl *D) { return true; } - -protected: - /// EmitImpl - Serialize this TemplateTypeParmDecl. Called by Decl::Emit. - virtual void EmitImpl(llvm::Serializer& S) const; - - /// CreateImpl - Deserialize a TemplateTypeParmDecl. Called by Decl::Create. - static NonTypeTemplateParmDecl* CreateImpl(llvm::Deserializer& D, - ASTContext& C); - - friend Decl* Decl::Create(llvm::Deserializer& D, ASTContext& C); }; /// TemplateTemplateParmDecl - Declares a template template parameter, @@ -389,16 +370,6 @@ public: return D->getKind() == TemplateTemplateParm; } static bool classof(const TemplateTemplateParmDecl *D) { return true; } - -protected: - /// EmitImpl - Serialize this TemplateTypeParmDecl. Called by Decl::Emit. - virtual void EmitImpl(llvm::Serializer& S) const; - - /// CreateImpl - Deserialize a TemplateTypeParmDecl. Called by Decl::Create. - static TemplateTemplateParmDecl* CreateImpl(llvm::Deserializer& D, - ASTContext& C); - - friend Decl* Decl::Create(llvm::Deserializer& D, ASTContext& C); }; /// \brief Represents a template argument within a class template diff --git a/include/clang/AST/DeclarationName.h b/include/clang/AST/DeclarationName.h index 729045910b..db140999b0 100644 --- a/include/clang/AST/DeclarationName.h +++ b/include/clang/AST/DeclarationName.h @@ -15,7 +15,6 @@ #include "clang/Basic/IdentifierTable.h" #include "clang/AST/Type.h" -#include "llvm/Bitcode/SerializationFwd.h" namespace llvm { template struct DenseMapInfo; diff --git a/include/clang/AST/Expr.h b/include/clang/AST/Expr.h index 7ec0c74e8d..e56101509f 100644 --- a/include/clang/AST/Expr.h +++ b/include/clang/AST/Expr.h @@ -294,10 +294,6 @@ public: T->getStmtClass() <= lastExprConstant; } static bool classof(const Expr *) { return true; } - - static inline Expr* Create(llvm::Deserializer& D, ASTContext& C) { - return cast(Stmt::Create(D, C)); - } }; @@ -352,9 +348,6 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static DeclRefExpr* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// PredefinedExpr - [C99 6.4.2.2] - A predefined identifier such as __func__. @@ -393,9 +386,6 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static PredefinedExpr* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; class IntegerLiteral : public Expr { @@ -432,9 +422,6 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static IntegerLiteral* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; class CharacterLiteral : public Expr { @@ -469,9 +456,6 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static CharacterLiteral* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; class FloatingLiteral : public Expr { @@ -511,9 +495,6 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static FloatingLiteral* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// ImaginaryLiteral - We support imaginary integer and floating point literals, @@ -544,9 +525,6 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static ImaginaryLiteral* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// StringLiteral - This represents a string literal expression, e.g. "foo" @@ -636,9 +614,6 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static StringLiteral* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// ParenExpr - This represents a parethesized expression, e.g. "(1)". This @@ -678,9 +653,6 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static ParenExpr* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; @@ -782,9 +754,6 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static UnaryOperator* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// SizeOfAlignOfExpr - [C99 6.5.3.4] - This is for sizeof/alignof, both of @@ -872,9 +841,6 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static SizeOfAlignOfExpr* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; //===----------------------------------------------------------------------===// @@ -951,9 +917,6 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static ArraySubscriptExpr* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; @@ -1055,10 +1018,6 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static CallExpr* CreateImpl(llvm::Deserializer& D, ASTContext& C, - StmtClass SC); }; /// MemberExpr - [C99 6.5.2.3] Structure and Union Members. X->F and X.F. @@ -1118,9 +1077,6 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static MemberExpr* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// CompoundLiteralExpr - [C99 6.5.2.5] @@ -1169,9 +1125,6 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static CompoundLiteralExpr* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// CastExpr - Base class for type casts, including both implicit @@ -1260,9 +1213,6 @@ public: return T->getStmtClass() == ImplicitCastExprClass; } static bool classof(const ImplicitCastExpr *) { return true; } - - virtual void EmitImpl(llvm::Serializer& S) const; - static ImplicitCastExpr* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// ExplicitCastExpr - An explicit cast written in the source @@ -1341,9 +1291,6 @@ public: return T->getStmtClass() == CStyleCastExprClass; } static bool classof(const CStyleCastExpr *) { return true; } - - virtual void EmitImpl(llvm::Serializer& S) const; - static CStyleCastExpr* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// \brief A builtin binary operation expression such as "x + y" or "x <= y". @@ -1466,9 +1413,6 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static BinaryOperator* CreateImpl(llvm::Deserializer& D, ASTContext& C); protected: BinaryOperator(Expr *lhs, Expr *rhs, Opcode opc, QualType ResTy, @@ -1520,10 +1464,6 @@ public: static bool classof(const Stmt *S) { return S->getStmtClass() == CompoundAssignOperatorClass; } - - virtual void EmitImpl(llvm::Serializer& S) const; - static CompoundAssignOperator* CreateImpl(llvm::Deserializer& D, - ASTContext& C); }; /// ConditionalOperator - The ?: operator. Note that LHS may be null when the @@ -1587,9 +1527,6 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static ConditionalOperator* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// AddrLabelExpr - The GNU address of label extension, representing &&label. @@ -1625,9 +1562,6 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static AddrLabelExpr* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// StmtExpr - This is the GNU Statement Expression extension: ({int X=4; X;}). @@ -1665,9 +1599,6 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static StmtExpr* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// TypesCompatibleExpr - GNU builtin-in function __builtin_type_compatible_p. @@ -1710,9 +1641,6 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static TypesCompatibleExpr* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// ShuffleVectorExpr - clang-specific builtin-in function @@ -1790,9 +1718,6 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static ShuffleVectorExpr* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// ChooseExpr - GNU builtin-in function __builtin_choose_expr. @@ -1855,9 +1780,6 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static ChooseExpr* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// GNUNullExpr - Implements the GNU __null extension, which is a name @@ -1892,9 +1814,6 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static GNUNullExpr* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// VAArgExpr, used for the builtin function __builtin_va_start. @@ -1932,9 +1851,6 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static VAArgExpr* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// @brief Describes an C or C++ initializer list. @@ -2085,14 +2001,6 @@ public: iterator end() { return InitExprs.end(); } reverse_iterator rbegin() { return InitExprs.rbegin(); } reverse_iterator rend() { return InitExprs.rend(); } - - // Serailization. - virtual void EmitImpl(llvm::Serializer& S) const; - static InitListExpr* CreateImpl(llvm::Deserializer& D, ASTContext& C); - -private: - // Used by serializer. - InitListExpr() : Expr(InitListExprClass, QualType()) {} }; /// @brief Represents a C99 designated initializer expression. @@ -2476,9 +2384,6 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static ExtVectorElementExpr* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; @@ -2528,9 +2433,6 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static BlockExpr* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// BlockDeclRefExpr - A reference to a declared variable, function, @@ -2568,9 +2470,6 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static BlockDeclRefExpr* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; } // end namespace clang diff --git a/include/clang/AST/ExprCXX.h b/include/clang/AST/ExprCXX.h index 542a7dba4c..7a68d8aef0 100644 --- a/include/clang/AST/ExprCXX.h +++ b/include/clang/AST/ExprCXX.h @@ -129,10 +129,6 @@ public: } } static bool classof(const CXXNamedCastExpr *) { return true; } - - virtual void EmitImpl(llvm::Serializer& S) const; - static CXXNamedCastExpr *CreateImpl(llvm::Deserializer& D, ASTContext& C, - StmtClass SC); }; /// CXXStaticCastExpr - A C++ @c static_cast expression (C++ [expr.static.cast]). @@ -276,9 +272,6 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static CXXTypeidExpr* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// CXXThisExpr - Represents the "this" expression in C++, which is a @@ -313,9 +306,6 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static CXXThisExpr* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// CXXThrowExpr - [C++ 15] C++ Throw Expression. This handles @@ -387,11 +377,6 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); - - // Serialization - virtual void EmitImpl(llvm::Serializer& S) const; - static CXXDefaultArgExpr* CreateImpl(llvm::Deserializer& D, - ASTContext& C); }; /// CXXFunctionalCastExpr - Represents an explicit C++ type conversion @@ -417,10 +402,6 @@ public: return T->getStmtClass() == CXXFunctionalCastExprClass; } static bool classof(const CXXFunctionalCastExpr *) { return true; } - - virtual void EmitImpl(llvm::Serializer& S) const; - static CXXFunctionalCastExpr * - CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// @brief Represents a C++ functional cast expression that builds a @@ -482,9 +463,6 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static CXXTemporaryObjectExpr *CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// CXXZeroInitValueExpr - [C++ 5.2.3p2] @@ -523,10 +501,6 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static CXXZeroInitValueExpr * - CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// CXXConditionDeclExpr - Condition declaration of a if/switch/while/for @@ -560,11 +534,6 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); - - // FIXME: Implement these. - //virtual void EmitImpl(llvm::Serializer& S) const; - //static CXXConditionDeclExpr * - // CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// CXXNewExpr - A new expression for memory allocation and constructor calls, @@ -600,19 +569,6 @@ class CXXNewExpr : public Expr { SourceLocation StartLoc; SourceLocation EndLoc; - // Deserialization constructor - CXXNewExpr(QualType ty, bool globalNew, bool parenTypeId, bool initializer, - bool array, unsigned numPlaceArgs, unsigned numConsArgs, - Stmt **subExprs, FunctionDecl *operatorNew, - FunctionDecl *operatorDelete, CXXConstructorDecl *constructor, - SourceLocation startLoc, SourceLocation endLoc) - : Expr(CXXNewExprClass, ty, ty->isDependentType(), ty->isDependentType()), - GlobalNew(globalNew), ParenTypeId(parenTypeId), - Initializer(initializer), Array(array), NumPlacementArgs(numPlaceArgs), - NumConstructorArgs(numConsArgs), SubExprs(subExprs), - OperatorNew(operatorNew), OperatorDelete(operatorDelete), - Constructor(constructor), StartLoc(startLoc), EndLoc(endLoc) - { } public: CXXNewExpr(bool globalNew, FunctionDecl *operatorNew, Expr **placementArgs, unsigned numPlaceArgs, bool ParenTypeId, Expr *arraySize, @@ -706,9 +662,6 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static CXXNewExpr* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// CXXDeleteExpr - A delete expression for memory deallocation and destructor @@ -751,9 +704,6 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static CXXDeleteExpr * CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// \brief Represents the name of a function that has not been @@ -800,9 +750,6 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static UnresolvedFunctionNameExpr *CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// UnaryTypeTraitExpr - A GCC or MS unary type trait, as used in the @@ -845,9 +792,6 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static UnaryTypeTraitExpr *CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// QualifiedDeclRefExpr - A reference to a declared variable, @@ -883,9 +827,6 @@ public: return T->getStmtClass() == QualifiedDeclRefExprClass; } static bool classof(const QualifiedDeclRefExpr *) { return true; } - - virtual void EmitImpl(llvm::Serializer& S) const; - static QualifiedDeclRefExpr* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// \brief A qualified reference to a name whose declaration cannot diff --git a/include/clang/AST/ExprObjC.h b/include/clang/AST/ExprObjC.h index 5ef7362916..05f26d1ec0 100644 --- a/include/clang/AST/ExprObjC.h +++ b/include/clang/AST/ExprObjC.h @@ -53,9 +53,6 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static ObjCStringLiteral* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// ObjCEncodeExpr, used for @encode in Objective-C. @encode has the same type @@ -93,9 +90,6 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static ObjCEncodeExpr* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// ObjCSelectorExpr used for @selector in Objective-C. @@ -132,9 +126,6 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static ObjCSelectorExpr* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// ObjCProtocolExpr used for protocol expression in Objective-C. This is used @@ -172,9 +163,6 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static ObjCProtocolExpr* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// ObjCIvarRefExpr - A reference to an ObjC instance variable. @@ -215,9 +203,6 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static ObjCIvarRefExpr* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// ObjCPropertyRefExpr - A dot-syntax expression to access an ObjC @@ -254,9 +239,6 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static ObjCPropertyRefExpr* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// ObjCKVCRefExpr - A dot-syntax expression to access "implicit" properties @@ -319,9 +301,6 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static ObjCKVCRefExpr* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; class ObjCMessageExpr : public Expr { @@ -453,10 +432,6 @@ public: arg_iterator arg_end() { return &SubExprs[ARGS_START] + NumArgs; } const_arg_iterator arg_begin() const { return &SubExprs[ARGS_START]; } const_arg_iterator arg_end() const { return &SubExprs[ARGS_START] + NumArgs; } - - // Serialization. - virtual void EmitImpl(llvm::Serializer& S) const; - static ObjCMessageExpr* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// ObjCSuperExpr - Represents the "super" expression in Objective-C, @@ -477,9 +452,6 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static ObjCSuperExpr* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; } // end namespace clang diff --git a/include/clang/AST/Stmt.h b/include/clang/AST/Stmt.h index 0d01d88e37..0bf4f67230 100644 --- a/include/clang/AST/Stmt.h +++ b/include/clang/AST/Stmt.h @@ -21,7 +21,6 @@ #include "clang/AST/DeclGroup.h" #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/iterator.h" -#include "llvm/Bitcode/SerializationFwd.h" #include "clang/AST/ASTContext.h" #include using llvm::dyn_cast_or_null; @@ -221,14 +220,6 @@ public: const_child_iterator child_end() const { return const_child_iterator(const_cast(this)->child_end()); } - - void Emit(llvm::Serializer& S) const; - 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."); - } }; /// DeclStmt - Adaptor class for mixing declarations with statements and @@ -287,10 +278,6 @@ public: decl_iterator decl_end() { return DG.end(); } const_decl_iterator decl_begin() const { return DG.begin(); } const_decl_iterator decl_end() const { return DG.end(); } - - // Serialization. - virtual void EmitImpl(llvm::Serializer& S) const; - static DeclStmt* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// NullStmt - This is the null statement ";": C99 6.8.3p3. @@ -316,9 +303,6 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static NullStmt* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// CompoundStmt - This represents a group of statements like { stmt stmt }. @@ -395,9 +379,6 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static CompoundStmt* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; // SwitchCase is the base class for CaseStmt and DefaultStmt, @@ -483,9 +464,6 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static CaseStmt* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; class DefaultStmt : public SwitchCase { @@ -517,9 +495,6 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static DefaultStmt* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; class LabelStmt : public Stmt { @@ -554,9 +529,6 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static LabelStmt* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; @@ -607,9 +579,6 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static IfStmt* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// SwitchStmt - This represents a 'switch' stmt. @@ -663,9 +632,6 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static SwitchStmt* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; @@ -706,9 +672,6 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static WhileStmt* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// DoStmt - This represents a 'do/while' stmt. @@ -749,9 +712,6 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static DoStmt* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; @@ -805,9 +765,6 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static ForStmt* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// GotoStmt - This represents a direct goto. @@ -842,9 +799,6 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static GotoStmt* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// IndirectGotoStmt - This represents an indirect goto. @@ -879,9 +833,6 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static IndirectGotoStmt* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; @@ -909,9 +860,6 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static ContinueStmt* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// BreakStmt - This represents a break. @@ -937,9 +885,6 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static BreakStmt* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; @@ -979,9 +924,6 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static ReturnStmt* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// AsmStmt - This represents a GNU inline-assembly statement extension. @@ -1213,9 +1155,6 @@ public: virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static AsmStmt* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// ObjCForCollectionStmt - This represents Objective-c's collection statement; @@ -1255,9 +1194,6 @@ public: // Iterators virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static ObjCForCollectionStmt* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// ObjCAtCatchStmt - This represents objective-c's @catch statement. @@ -1310,9 +1246,6 @@ public: virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static ObjCAtCatchStmt* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// ObjCAtFinallyStmt - This represent objective-c's @finally Statement @@ -1340,9 +1273,6 @@ public: virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static ObjCAtFinallyStmt* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// ObjCAtTryStmt - This represent objective-c's over-all @@ -1390,9 +1320,6 @@ public: virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static ObjCAtTryStmt* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// ObjCAtSynchronizedStmt - This is for objective-c's @synchronized statement. @@ -1442,10 +1369,6 @@ public: virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static ObjCAtSynchronizedStmt* CreateImpl(llvm::Deserializer& D, - ASTContext& C); }; /// ObjCAtThrowStmt - This represents objective-c's @throw statement. @@ -1475,9 +1398,6 @@ public: virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static ObjCAtThrowStmt* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// CXXCatchStmt - This represents a C++ catch block. @@ -1510,9 +1430,6 @@ public: virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static CXXCatchStmt* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; /// CXXTryStmt - A C++ try block, including all handlers. @@ -1550,9 +1467,6 @@ public: virtual child_iterator child_begin(); virtual child_iterator child_end(); - - virtual void EmitImpl(llvm::Serializer& S) const; - static CXXTryStmt* CreateImpl(llvm::Deserializer& D, ASTContext& C); }; } // end namespace clang diff --git a/include/clang/AST/Type.h b/include/clang/AST/Type.h index 19f12adb7d..5374c00949 100644 --- a/include/clang/AST/Type.h +++ b/include/clang/AST/Type.h @@ -23,7 +23,6 @@ #include "llvm/ADT/FoldingSet.h" #include "llvm/ADT/PointerIntPair.h" #include "llvm/ADT/PointerUnion.h" -#include "llvm/Bitcode/SerializationFwd.h" using llvm::isa; using llvm::cast; @@ -203,14 +202,6 @@ public: bool isObjCGCStrong() const { return getObjCGCAttr() == Strong; } - - /// Emit - Serialize a QualType to Bitcode. - void Emit(llvm::Serializer& S) const; - - /// Read - Deserialize a QualType from Bitcode. - static QualType ReadVal(llvm::Deserializer& D); - - void ReadBackpatch(llvm::Deserializer& D); }; } // end clang. @@ -301,9 +292,6 @@ protected: virtual void Destroy(ASTContext& C); friend class ASTContext; - void EmitTypeInternal(llvm::Serializer& S) const; - void ReadTypeInternal(llvm::Deserializer& D); - public: TypeClass getTypeClass() const { return static_cast(TC); } @@ -487,20 +475,6 @@ public: void dump() const; virtual void getAsStringInternal(std::string &InnerString) const = 0; static bool classof(const Type *) { return true; } - -protected: - /// Emit - Emit a Type to bitcode. Used by ASTContext. - void Emit(llvm::Serializer& S) const; - - /// Create - Construct a Type from bitcode. Used by ASTContext. - static void Create(ASTContext& Context, unsigned i, llvm::Deserializer& S); - - /// EmitImpl - Subclasses must implement this method in order to - /// be serialized. - // FIXME: Make this abstract once implemented. - virtual void EmitImpl(llvm::Serializer& S) const { - assert(false && "Serialization for type not supported."); - } }; /// ExtQualType - TR18037 (C embedded extensions) 6.2.5p26 @@ -546,11 +520,6 @@ public: static bool classof(const Type *T) { return T->getTypeClass() == ExtQual; } static bool classof(const ExtQualType *) { return true; } - -protected: - virtual void EmitImpl(llvm::Serializer& S) const; - static Type* CreateImpl(ASTContext& Context,llvm::Deserializer& D); - friend class Type; }; @@ -643,11 +612,6 @@ public: static bool classof(const Type *T) { return T->getTypeClass() == Complex; } static bool classof(const ComplexType *) { return true; } - -protected: - virtual void EmitImpl(llvm::Serializer& S) const; - static Type* CreateImpl(ASTContext& Context,llvm::Deserializer& D); - friend class Type; }; /// PointerType - C99 6.7.5.1 - Pointer Declarators. @@ -674,11 +638,6 @@ public: static bool classof(const Type *T) { return T->getTypeClass() == Pointer; } static bool classof(const PointerType *) { return true; } - -protected: - virtual void EmitImpl(llvm::Serializer& S) const; - static Type* CreateImpl(ASTContext& Context,llvm::Deserializer& D); - friend class Type; }; /// BlockPointerType - pointer to a block type. @@ -710,11 +669,6 @@ public: return T->getTypeClass() == BlockPointer; } static bool classof(const BlockPointerType *) { return true; } - - protected: - virtual void EmitImpl(llvm::Serializer& S) const; - static Type* CreateImpl(ASTContext& Context,llvm::Deserializer& D); - friend class Type; }; /// ReferenceType - Base for LValueReferenceType and RValueReferenceType @@ -742,9 +696,6 @@ public: T->getTypeClass() == RValueReference; } static bool classof(const ReferenceType *) { return true; } - -protected: - virtual void EmitImpl(llvm::Serializer& S) const; }; /// LValueReferenceType - C++ [dcl.ref] - Lvalue reference @@ -761,10 +712,6 @@ public: return T->getTypeClass() == LValueReference; } static bool classof(const LValueReferenceType *) { return true; } - -protected: - static Type* CreateImpl(ASTContext& Context, llvm::Deserializer& D); - friend class Type; }; /// RValueReferenceType - C++0x [dcl.ref] - Rvalue reference @@ -781,10 +728,6 @@ public: return T->getTypeClass() == RValueReference; } static bool classof(const RValueReferenceType *) { return true; } - -protected: - static Type* CreateImpl(ASTContext& Context, llvm::Deserializer& D); - friend class Type; }; /// MemberPointerType - C++ 8.3.3 - Pointers to members @@ -822,11 +765,6 @@ public: return T->getTypeClass() == MemberPointer; } static bool classof(const MemberPointerType *) { return true; } - -protected: - virtual void EmitImpl(llvm::Serializer& S) const; - static Type* CreateImpl(ASTContext& Context, llvm::Deserializer& D); - friend class Type; }; /// ArrayType - C99 6.7.5.2 - Array Declarators. @@ -910,11 +848,6 @@ public: return T->getTypeClass() == ConstantArray; } static bool classof(const ConstantArrayType *) { return true; } - -protected: - virtual void EmitImpl(llvm::Serializer& S) const; - static Type* CreateImpl(ASTContext& Context, llvm::Deserializer& D); - friend class Type; }; /// IncompleteArrayType - This class represents C arrays with an unspecified @@ -946,11 +879,6 @@ public: ID.AddInteger(SizeMod); ID.AddInteger(TypeQuals); } - -protected: - virtual void EmitImpl(llvm::Serializer& S) const; - static Type* CreateImpl(ASTContext& Context,llvm::Deserializer& D); - friend class Type; }; /// VariableArrayType - This class represents C arrays with a specified size @@ -998,11 +926,6 @@ public: void Profile(llvm::FoldingSetNodeID &ID) { assert(0 && "Cannnot unique VariableArrayTypes."); } - -protected: - virtual void EmitImpl(llvm::Serializer& S) const; - static Type* CreateImpl(ASTContext& Context,llvm::Deserializer& D); - friend class Type; }; /// DependentSizedArrayType - This type represents an array type in @@ -1046,11 +969,6 @@ public: void Profile(llvm::FoldingSetNodeID &ID) { assert(0 && "Cannnot unique DependentSizedArrayTypes."); } - -protected: - virtual void EmitImpl(llvm::Serializer& S) const; - static Type* CreateImpl(ASTContext& Context,llvm::Deserializer& D); - friend class Type; }; /// VectorType - GCC generic vector type. This type is created using @@ -1215,11 +1133,6 @@ public: return T->getTypeClass() == FunctionNoProto; } static bool classof(const FunctionNoProtoType *) { return true; } - -protected: - virtual void EmitImpl(llvm::Serializer& S) const; - static Type* CreateImpl(ASTContext& Context,llvm::Deserializer& D); - friend class Type; }; /// FunctionProtoType - Represents a prototype with argument type info, e.g. @@ -1283,11 +1196,6 @@ public: static void Profile(llvm::FoldingSetNodeID &ID, QualType Result, arg_type_iterator ArgTys, unsigned NumArgs, bool isVariadic, unsigned TypeQuals); - -protected: - virtual void EmitImpl(llvm::Serializer& S) const; - static Type* CreateImpl(ASTContext& Context,llvm::Deserializer& D); - friend class Type; }; @@ -1315,11 +1223,6 @@ public: static bool classof(const Type *T) { return T->getTypeClass() == Typedef; } static bool classof(const TypedefType *) { return true; } - -protected: - virtual void EmitImpl(llvm::Serializer& S) const; - static Type* CreateImpl(ASTContext& Context,llvm::Deserializer& D); - friend class Type; }; /// TypeOfExprType (GCC extension). @@ -1334,11 +1237,6 @@ public: static bool classof(const Type *T) { return T->getTypeClass() == TypeOfExpr; } static bool classof(const TypeOfExprType *) { return true; } - -protected: - virtual void EmitImpl(llvm::Serializer& S) const; - static Type* CreateImpl(ASTContext& Context, llvm::Deserializer& D); - friend class Type; }; /// TypeOfType (GCC extension). @@ -1356,11 +1254,6 @@ public: static bool classof(const Type *T) { return T->getTypeClass() == TypeOf; } static bool classof(const TypeOfType *) { return true; } - -protected: - virtual void EmitImpl(llvm::Serializer& S) const; - static Type* CreateImpl(ASTContext& Context, llvm::Deserializer& D); - friend class Type; }; class TagType : public Type { @@ -1398,11 +1291,6 @@ public: static bool classof(const TagType *) { return true; } static bool classof(const RecordType *) { return true; } static bool classof(const EnumType *) { return true; } - -protected: - virtual void EmitImpl(llvm::Serializer& S) const; - static Type* CreateImpl(ASTContext& Context, llvm::Deserializer& D); - friend class Type; }; /// RecordType - This is a helper class that allows the use of isa/cast/dyncast @@ -1493,11 +1381,6 @@ public: return T->getTypeClass() == TemplateTypeParm; } static bool classof(const TemplateTypeParmType *T) { return true; } - -protected: - virtual void EmitImpl(llvm::Serializer& S) const; - static Type* CreateImpl(ASTContext& Context, llvm::Deserializer& D); - friend class Type; }; /// \brief Represents the type of a template specialization as written @@ -1577,11 +1460,6 @@ public: return T->getTypeClass() == TemplateSpecialization; } static bool classof(const TemplateSpecializationType *T) { return true; } - -protected: - virtual void EmitImpl(llvm::Serializer& S) const; - static Type* CreateImpl(ASTContext& Context, llvm::Deserializer& D); - friend class Type; }; /// \brief Represents a type that was referred to via a qualified @@ -1628,11 +1506,6 @@ public: return T->getTypeClass() == QualifiedName; } static bool classof(const QualifiedNameType *T) { return true; } - -protected: - virtual void EmitImpl(llvm::Serializer& S) const; - static Type* CreateImpl(ASTContext& Context, llvm::Deserializer& D); - friend class Type; }; /// \brief Represents a 'typename' specifier that names a type within @@ -1709,11 +1582,6 @@ public: return T->getTypeClass() == Typename; } static bool classof(const TypenameType *T) { return true; } - -protected: - virtual void EmitImpl(llvm::Serializer& S) const; - static Type* CreateImpl(ASTContext& Context, llvm::Deserializer& D); - friend class Type; }; /// ObjCInterfaceType - Interfaces are the core concept in Objective-C for diff --git a/include/clang/Basic/FileManager.h b/include/clang/Basic/FileManager.h index a8ed87011f..ebd2812ece 100644 --- a/include/clang/Basic/FileManager.h +++ b/include/clang/Basic/FileManager.h @@ -16,7 +16,6 @@ #include "llvm/ADT/StringMap.h" #include "llvm/ADT/OwningPtr.h" -#include "llvm/Bitcode/SerializationFwd.h" #include "llvm/Support/Allocator.h" #include "llvm/Config/config.h" // for mode_t #include diff --git a/include/clang/Basic/IdentifierTable.h b/include/clang/Basic/IdentifierTable.h index 3156bbc4e9..0553a98022 100644 --- a/include/clang/Basic/IdentifierTable.h +++ b/include/clang/Basic/IdentifierTable.h @@ -20,7 +20,6 @@ #include "llvm/ADT/StringMap.h" #include "llvm/ADT/SmallString.h" #include "llvm/ADT/OwningPtr.h" -#include "llvm/Bitcode/SerializationFwd.h" #include "llvm/Support/PointerLikeTypeTraits.h" #include #include @@ -207,12 +206,6 @@ public: /// know that HandleIdentifier will not affect the token. bool isHandleIdentifierCase() const { return NeedsHandleIdentifier; } - /// Emit - Serialize this IdentifierInfo to a bitstream. - void Emit(llvm::Serializer& S) const; - - /// Read - Deserialize an IdentifierInfo object from a bitstream. - void Read(llvm::Deserializer& D); - private: /// RecomputeNeedsHandleIdentifier - The Preprocessor::HandleIdentifier does /// several special (but rare) things to identifiers of various sorts. For @@ -349,20 +342,6 @@ public: void PrintStats() const; void AddKeywords(const LangOptions &LangOpts); - - /// Emit - Serialize this IdentifierTable to a bitstream. This should - /// be called AFTER objects that externally reference the identifiers in the - /// table have been serialized. This is because only the identifiers that - /// are actually referenced are serialized. - void Emit(llvm::Serializer& S) const; - - /// Create - Deserialize an IdentifierTable from a bitstream. - static IdentifierTable* CreateAndRegister(llvm::Deserializer& D); - -private: - /// This ctor is not intended to be used by anyone except for object - /// serialization. - IdentifierTable(); }; /// Selector - This smart pointer class efficiently represents Objective-C @@ -440,12 +419,6 @@ public: static Selector getTombstoneMarker() { return Selector(uintptr_t(-2)); } - - // Emit - Emit a selector to bitcode. - void Emit(llvm::Serializer& S) const; - - // ReadVal - Read a selector from bitcode. - static Selector ReadVal(llvm::Deserializer& D); }; /// SelectorTable - This table allows us to fully hide how we implement @@ -484,12 +457,6 @@ public: &Idents.get(&SelectorName[0], &SelectorName[SelectorName.size()]); return SelTable.getUnarySelector(SetterName); } - - // Emit - Emit a SelectorTable to bitcode. - void Emit(llvm::Serializer& S) const; - - // Create - Reconstitute a SelectorTable from bitcode. - static SelectorTable* CreateAndRegister(llvm::Deserializer& D); }; /// DeclarationNameExtra - Common base of the MultiKeywordSelector, diff --git a/include/clang/Basic/LangOptions.h b/include/clang/Basic/LangOptions.h index 40b2e5372a..60f4d084f3 100644 --- a/include/clang/Basic/LangOptions.h +++ b/include/clang/Basic/LangOptions.h @@ -14,8 +14,6 @@ #ifndef LLVM_CLANG_LANGOPTIONS_H #define LLVM_CLANG_LANGOPTIONS_H -#include "llvm/Bitcode/SerializationFwd.h" - namespace clang { /// LangOptions - This class keeps track of the various options that can be @@ -146,12 +144,6 @@ public: return (VisibilityMode) SymbolVisibility; } void setVisibilityMode(VisibilityMode v) { SymbolVisibility = (unsigned) v; } - - /// Emit - Emit this LangOptions object to bitcode. - void Emit(llvm::Serializer& S) const; - - /// Read - Read new values for this LangOption object from bitcode. - void Read(llvm::Deserializer& S); }; } // end namespace clang diff --git a/include/clang/Basic/SourceLocation.h b/include/clang/Basic/SourceLocation.h index 3ed26fcbb2..2405c2fe7d 100644 --- a/include/clang/Basic/SourceLocation.h +++ b/include/clang/Basic/SourceLocation.h @@ -14,7 +14,6 @@ #ifndef LLVM_CLANG_SOURCELOCATION_H #define LLVM_CLANG_SOURCELOCATION_H -#include "llvm/Bitcode/SerializationFwd.h" #include #include @@ -130,12 +129,6 @@ public: return X; } - /// Emit - Emit this SourceLocation object to Bitcode. - void Emit(llvm::Serializer& S) const; - - /// ReadVal - Read a SourceLocation object from Bitcode. - static SourceLocation ReadVal(llvm::Deserializer& D); - void print(llvm::raw_ostream &OS, const SourceManager &SM) const; void dump(const SourceManager &SM) const; }; @@ -176,12 +169,6 @@ public: bool operator!=(const SourceRange &X) const { return B != X.B || E != X.E; } - - /// Emit - Emit this SourceRange object to Bitcode. - void Emit(llvm::Serializer& S) const; - - /// ReadVal - Read a SourceRange object from Bitcode. - static SourceRange ReadVal(llvm::Deserializer& D); }; /// FullSourceLoc - A SourceLocation and its associated SourceManager. Useful diff --git a/include/clang/Basic/SourceManager.h b/include/clang/Basic/SourceManager.h index e2c40a31c9..0b47df9ad9 100644 --- a/include/clang/Basic/SourceManager.h +++ b/include/clang/Basic/SourceManager.h @@ -15,7 +15,6 @@ #define LLVM_CLANG_SOURCEMANAGER_H #include "clang/Basic/SourceLocation.h" -#include "llvm/Bitcode/SerializationFwd.h" #include "llvm/Support/Allocator.h" #include "llvm/Support/DataTypes.h" #include "llvm/ADT/DenseMap.h" @@ -106,14 +105,6 @@ namespace SrcMgr { NumLines = RHS.NumLines; } - /// Emit - Emit this ContentCache to Bitcode. - void Emit(llvm::Serializer &S) const; - - /// ReadToSourceManager - Reconstitute a ContentCache from Bitcode - // and store it in the specified SourceManager. - static void ReadToSourceManager(llvm::Deserializer &D, SourceManager &SM, - FileManager *FMgr, std::vector &Buf); - private: // Disable assignments. ContentCache &operator=(const ContentCache& RHS); @@ -610,13 +601,6 @@ public: /// void PrintStats() const; - /// Emit - Emit this SourceManager to Bitcode. - void Emit(llvm::Serializer& S) const; - - /// Read - Reconstitute a SourceManager from Bitcode. - static SourceManager* CreateAndRegister(llvm::Deserializer& S, - FileManager &FMgr); - // Iteration over the source location entry table. typedef std::vector::const_iterator sloc_entry_iterator; @@ -638,8 +622,6 @@ public: unsigned getNextOffset() const { return NextOffset; } private: - friend class SrcMgr::ContentCache; // Used for deserialization. - /// isOffsetInFileID - Return true if the specified FileID contains the /// specified SourceLocation offset. This is a very hot method. inline bool isOffsetInFileID(FileID FID, unsigned SLocOffset) const { diff --git a/lib/AST/ASTContext.cpp b/lib/AST/ASTContext.cpp index 159110a080..a855ecf6b3 100644 --- a/lib/AST/ASTContext.cpp +++ b/lib/AST/ASTContext.cpp @@ -21,8 +21,6 @@ #include "clang/Basic/SourceManager.h" #include "clang/Basic/TargetInfo.h" #include "llvm/ADT/StringExtras.h" -#include "llvm/Bitcode/Serialize.h" -#include "llvm/Bitcode/Deserialize.h" #include "llvm/Support/MathExtras.h" #include "llvm/Support/MemoryBuffer.h" using namespace clang; @@ -3223,182 +3221,6 @@ QualType ASTContext::getCorrespondingUnsignedType(QualType T) { } } - -//===----------------------------------------------------------------------===// -// Serialization Support -//===----------------------------------------------------------------------===// - -enum { - BasicMetadataBlock = 1, - ASTContextBlock = 2, - DeclsBlock = 3 -}; - -void ASTContext::EmitASTBitcodeBuffer(std::vector &Buffer) const{ - // Create bitstream. - llvm::BitstreamWriter Stream(Buffer); - - // Emit the preamble. - Stream.Emit((unsigned)'B', 8); - Stream.Emit((unsigned)'C', 8); - Stream.Emit(0xC, 4); - Stream.Emit(0xF, 4); - Stream.Emit(0xE, 4); - Stream.Emit(0x0, 4); - - // Create serializer. - llvm::Serializer S(Stream); - - // ===---------------------------------------------------===/ - // Serialize the "Translation Unit" metadata. - // ===---------------------------------------------------===/ - - // Emit ASTContext. - S.EnterBlock(ASTContextBlock); - S.EmitOwnedPtr(this); - S.ExitBlock(); // exit "ASTContextBlock" - - S.EnterBlock(BasicMetadataBlock); - - // Block for SourceManager and Target. Allows easy skipping - // around to the block for the Selectors during deserialization. - S.EnterBlock(); - - // Emit the SourceManager. - S.Emit(getSourceManager()); - - // Emit the Target. - S.EmitPtr(&Target); - S.EmitCStr(Target.getTargetTriple()); - - S.ExitBlock(); // exit "SourceManager and Target Block" - - // Emit the Selectors. - S.Emit(Selectors); - - // Emit the Identifier Table. - S.Emit(Idents); - - S.ExitBlock(); // exit "BasicMetadataBlock" -} - - -/// Emit - Serialize an ASTContext object to Bitcode. -void ASTContext::Emit(llvm::Serializer& S) const { - S.Emit(LangOpts); - S.EmitRef(SourceMgr); - S.EmitRef(Target); - S.EmitRef(Idents); - S.EmitRef(Selectors); - - // Emit the size of the type vector so that we can reserve that size - // when we reconstitute the ASTContext object. - S.EmitInt(Types.size()); - - for (std::vector::const_iterator I=Types.begin(), E=Types.end(); - I!=E;++I) - (*I)->Emit(S); - - S.EmitOwnedPtr(TUDecl); - - // FIXME: S.EmitOwnedPtr(CFConstantStringTypeDecl); -} - - -ASTContext *ASTContext::ReadASTBitcodeBuffer(llvm::MemoryBuffer &Buffer, - FileManager &FMgr) { - // Check if the file is of the proper length. - if (Buffer.getBufferSize() & 0x3) { - // FIXME: Provide diagnostic: "Length should be a multiple of 4 bytes." - return 0; - } - - // Create the bitstream reader. - unsigned char *BufPtr = (unsigned char *)Buffer.getBufferStart(); - llvm::BitstreamReader Stream(BufPtr, BufPtr+Buffer.getBufferSize()); - - if (Stream.Read(8) != 'B' || - Stream.Read(8) != 'C' || - Stream.Read(4) != 0xC || - Stream.Read(4) != 0xF || - Stream.Read(4) != 0xE || - Stream.Read(4) != 0x0) { - // FIXME: Provide diagnostic. - return NULL; - } - - // Create the deserializer. - llvm::Deserializer Dezr(Stream); - - // ===---------------------------------------------------===/ - // Deserialize the "Translation Unit" metadata. - // ===---------------------------------------------------===/ - - // Skip to the BasicMetaDataBlock. First jump to ASTContextBlock - // (which will appear earlier) and record its location. - - bool FoundBlock = Dezr.SkipToBlock(ASTContextBlock); - assert (FoundBlock); - - llvm::Deserializer::Location ASTContextBlockLoc = - Dezr.getCurrentBlockLocation(); - - FoundBlock = Dezr.SkipToBlock(BasicMetadataBlock); - assert (FoundBlock); - - // Read the SourceManager. - SourceManager::CreateAndRegister(Dezr, FMgr); - - { // Read the TargetInfo. - llvm::SerializedPtrID PtrID = Dezr.ReadPtrID(); - char* triple = Dezr.ReadCStr(NULL,0,true); - Dezr.RegisterPtr(PtrID, TargetInfo::CreateTargetInfo(std::string(triple))); - delete [] triple; - } - - // For Selectors, we must read the identifier table first because the - // SelectorTable depends on the identifiers being already deserialized. - llvm::Deserializer::Location SelectorBlkLoc = Dezr.getCurrentBlockLocation(); - Dezr.SkipBlock(); - - // Read the identifier table. - IdentifierTable::CreateAndRegister(Dezr); - - // Now jump back and read the selectors. - Dezr.JumpTo(SelectorBlkLoc); - SelectorTable::CreateAndRegister(Dezr); - - // Now jump back to ASTContextBlock and read the ASTContext. - Dezr.JumpTo(ASTContextBlockLoc); - return Dezr.ReadOwnedPtr(); -} - -ASTContext* ASTContext::Create(llvm::Deserializer& D) { - - // Read the language options. - LangOptions LOpts; - LOpts.Read(D); - - SourceManager &SM = D.ReadRef(); - TargetInfo &t = D.ReadRef(); - IdentifierTable &idents = D.ReadRef(); - SelectorTable &sels = D.ReadRef(); - - unsigned size_reserve = D.ReadInt(); - - ASTContext* A = new ASTContext(LOpts, SM, t, idents, sels, - size_reserve); - - for (unsigned i = 0; i < size_reserve; ++i) - Type::Create(*A,i,D); - - A->TUDecl = cast(D.ReadOwnedPtr(*A)); - - // FIXME: A->CFConstantStringTypeDecl = D.ReadOwnedPtr(); - - return A; -} - ExternalASTSource::~ExternalASTSource() { } void ExternalASTSource::PrintStats() { } diff --git a/lib/AST/CMakeLists.txt b/lib/AST/CMakeLists.txt index 3fedbf6730..a282f202f2 100644 --- a/lib/AST/CMakeLists.txt +++ b/lib/AST/CMakeLists.txt @@ -12,7 +12,6 @@ add_clang_library(clangAST DeclCXX.cpp DeclGroup.cpp DeclObjC.cpp - DeclSerialization.cpp DeclTemplate.cpp ExprConstant.cpp Expr.cpp @@ -24,11 +23,9 @@ add_clang_library(clangAST StmtDumper.cpp StmtIterator.cpp StmtPrinter.cpp - StmtSerialization.cpp StmtViz.cpp TemplateName.cpp Type.cpp - TypeSerialization.cpp ) add_dependencies(clangAST ClangDiagnosticAST) diff --git a/lib/AST/DeclGroup.cpp b/lib/AST/DeclGroup.cpp index 64b0399901..5bdc881734 100644 --- a/lib/AST/DeclGroup.cpp +++ b/lib/AST/DeclGroup.cpp @@ -15,8 +15,6 @@ #include "clang/AST/Decl.h" #include "clang/AST/ASTContext.h" #include "llvm/Support/Allocator.h" -#include "llvm/Bitcode/Serialize.h" -#include "llvm/Bitcode/Deserialize.h" using namespace clang; DeclGroup* DeclGroup::Create(ASTContext &C, Decl **Decls, unsigned NumDecls) { @@ -27,24 +25,6 @@ DeclGroup* DeclGroup::Create(ASTContext &C, Decl **Decls, unsigned NumDecls) { return static_cast(Mem); } -/// Emit - Serialize a DeclGroup to Bitcode. -void DeclGroup::Emit(llvm::Serializer& S) const { - S.EmitInt(NumDecls); - S.BatchEmitOwnedPtrs(NumDecls, &(*this)[0]); -} - -/// Read - Deserialize a DeclGroup from Bitcode. -DeclGroup* DeclGroup::Read(llvm::Deserializer& D, ASTContext& C) { - unsigned NumDecls = (unsigned) D.ReadInt(); - unsigned Size = sizeof(DeclGroup) + sizeof(Decl*) * NumDecls; - unsigned alignment = llvm::AlignOf::Alignment; - DeclGroup* DG = (DeclGroup*) C.Allocate(Size, alignment); - new (DG) DeclGroup(); - DG->NumDecls = NumDecls; - D.BatchReadOwnedPtrs(NumDecls, &(*DG)[0], C); - return DG; -} - DeclGroup::DeclGroup(unsigned numdecls, Decl** decls) : NumDecls(numdecls) { assert(numdecls > 0); assert(decls); @@ -55,20 +35,3 @@ void DeclGroup::Destroy(ASTContext& C) { this->~DeclGroup(); C.Deallocate((void*) this); } - -void DeclGroupRef::Emit(llvm::Serializer& S) const { - if (isSingleDecl()) { - S.EmitBool(false); - S.EmitPtr(D); - } else { - S.EmitBool(true); - S.EmitPtr(&getDeclGroup()); - } -} - -DeclGroupRef DeclGroupRef::ReadVal(llvm::Deserializer& D) { - if (D.ReadBool()) - return DeclGroupRef(D.ReadPtr()); - - return DeclGroupRef(D.ReadPtr()); -} diff --git a/lib/AST/DeclSerialization.cpp b/lib/AST/DeclSerialization.cpp deleted file mode 100644 index 81fdae2edc..0000000000 --- a/lib/AST/DeclSerialization.cpp +++ /dev/null @@ -1,695 +0,0 @@ -//===--- DeclSerialization.cpp - Serialization of Decls ---------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file defines methods that implement bitcode serialization for Decls. -// -//===----------------------------------------------------------------------===// - -#include "clang/AST/ASTContext.h" -#include "clang/AST/Decl.h" -#include "clang/AST/DeclCXX.h" -#include "clang/AST/DeclTemplate.h" -#include "clang/AST/Expr.h" -#include "llvm/Bitcode/Serialize.h" -#include "llvm/Bitcode/Deserialize.h" - -using llvm::Serializer; -using llvm::Deserializer; -using llvm::SerializedPtrID; - -using namespace clang; - -//===----------------------------------------------------------------------===// -// Decl Serialization: Dispatch code to handle specialized decl types. -//===----------------------------------------------------------------------===// - -void Decl::Emit(Serializer& S) const { - S.EmitInt(getKind()); - EmitImpl(S); - S.Emit(getLocation()); - S.EmitBool(InvalidDecl); - // FIXME: HasAttrs? - S.EmitBool(Implicit); - S.EmitInt(IdentifierNamespace); - S.EmitInt(Access); - S.EmitPtr(cast_or_null(getDeclContext())); // From Decl. - S.EmitPtr(cast_or_null(getLexicalDeclContext())); // From Decl. - if (const DeclContext *DC = dyn_cast(this)) - DC->EmitOutRec(S); - - if (getDeclContext() && - !getDeclContext()->isFunctionOrMethod()) { - S.EmitBool(true); - S.EmitOwnedPtr(NextDeclInContext); - } else { - S.EmitBool(false); - S.EmitPtr(NextDeclInContext); - } -} - -Decl* Decl::Create(Deserializer& D, ASTContext& C) { - - Decl *Dcl; - Kind k = static_cast(D.ReadInt()); - - switch (k) { - default: - assert (false && "Not implemented."); - - case TranslationUnit: - Dcl = TranslationUnitDecl::CreateImpl(D, C); - break; - - case Namespace: - Dcl = NamespaceDecl::CreateImpl(D, C); - break; - - case Var: - Dcl = VarDecl::CreateImpl(D, C); - break; - - case Enum: - Dcl = EnumDecl::CreateImpl(D, C); - break; - - case EnumConstant: - Dcl = EnumConstantDecl::CreateImpl(D, C); - break; - - case Field: - Dcl = FieldDecl::CreateImpl(D, C); - break; - - case ParmVar: - Dcl = ParmVarDecl::CreateImpl(D, C); - break; - - case OriginalParmVar: - Dcl = OriginalParmVarDecl::CreateImpl(D, C); - break; - - case Function: - Dcl = FunctionDecl::CreateImpl(D, C); - break; - - case OverloadedFunction: - Dcl = OverloadedFunctionDecl::CreateImpl(D, C); - break; - - case Record: - Dcl = RecordDecl::CreateImpl(D, C); - break; - - case Typedef: - Dcl = TypedefDecl::CreateImpl(D, C); - break; - - case TemplateTypeParm: - Dcl = TemplateTypeParmDecl::CreateImpl(D, C); - break; - - case FileScopeAsm: - Dcl = FileScopeAsmDecl::CreateImpl(D, C); - break; - } - - Dcl->Loc = SourceLocation::ReadVal(D); // From Decl. - Dcl->InvalidDecl = D.ReadBool(); - // FIXME: HasAttrs? - Dcl->Implicit = D.ReadBool(); - Dcl->IdentifierNamespace = D.ReadInt(); - Dcl->Access = D.ReadInt(); - - assert(Dcl->DeclCtx.getOpaqueValue() == 0); - - const SerializedPtrID &SemaDCPtrID = D.ReadPtrID(); - const SerializedPtrID &LexicalDCPtrID = D.ReadPtrID(); - - if (SemaDCPtrID == LexicalDCPtrID) { - // Allow back-patching. Observe that we register the variable of the - // *object* for back-patching. Its actual value will get filled in later. - uintptr_t X; - D.ReadUIntPtr(X, SemaDCPtrID); - Dcl->DeclCtx = reinterpret_cast(X); - } else { - MultipleDC *MDC = new MultipleDC(); - Dcl->DeclCtx = MDC; - // Allow back-patching. Observe that we register the variable of the - // *object* for back-patching. Its actual value will get filled in later. - D.ReadPtr(MDC->SemanticDC, SemaDCPtrID); - D.ReadPtr(MDC->LexicalDC, LexicalDCPtrID); - } - if (DeclContext *DC = dyn_cast(Dcl)) - DC->ReadOutRec(D, C); - bool OwnsNext = D.ReadBool(); - if (OwnsNext) - Dcl->NextDeclInContext = D.ReadOwnedPtr(C); - else - D.ReadPtr(Dcl->NextDeclInContext); - return Dcl; -} - -//===----------------------------------------------------------------------===// -// Common serialization logic for subclasses of DeclContext. -//===----------------------------------------------------------------------===// - -void DeclContext::EmitOutRec(Serializer& S) const { - bool Owned = !isFunctionOrMethod(); - S.EmitBool(Owned); - if (Owned) - S.EmitOwnedPtr(FirstDecl); - else - S.EmitPtr(FirstDecl); - S.EmitPtr(LastDecl); -} - -void DeclContext::ReadOutRec(Deserializer& D, ASTContext& C) { - bool Owned = D.ReadBool(); - if (Owned) - FirstDecl = cast_or_null(D.ReadOwnedPtr(C)); - else - D.ReadPtr(FirstDecl); - D.ReadPtr(LastDecl); -} - -//===----------------------------------------------------------------------===// -// Common serialization logic for subclasses of NamedDecl. -//===----------------------------------------------------------------------===// - -void NamedDecl::EmitInRec(Serializer& S) const { - S.EmitInt(Name.getNameKind()); - - switch (Name.getNameKind()) { - case DeclarationName::Identifier: - S.EmitPtr(Name.getAsIdentifierInfo()); - break; - - case DeclarationName::ObjCZeroArgSelector: - case DeclarationName::ObjCOneArgSelector: - case DeclarationName::ObjCMultiArgSelector: - Name.getObjCSelector().Emit(S); - break; - - case DeclarationName::CXXConstructorName: - case DeclarationName::CXXDestructorName: - case DeclarationName::CXXConversionFunctionName: - Name.getCXXNameType().Emit(S); - break; - - case DeclarationName::CXXOperatorName: - S.EmitInt(Name.getCXXOverloadedOperator()); - break; - - case DeclarationName::CXXUsingDirective: - // No extra data to emit - break; - } -} - -void NamedDecl::ReadInRec(Deserializer& D, ASTContext& C) { - DeclarationName::NameKind Kind - = static_cast(D.ReadInt()); - switch (Kind) { - case DeclarationName::Identifier: { - // Don't allow back-patching. The IdentifierInfo table must already - // be loaded. - Name = D.ReadPtr(); - break; - } - - case DeclarationName::ObjCZeroArgSelector: - case DeclarationName::ObjCOneArgSelector: - case DeclarationName::ObjCMultiArgSelector: - Name = Selector::ReadVal(D); - break; - - case DeclarationName::CXXConstructorName: - Name = C.DeclarationNames.getCXXConstructorName(QualType::ReadVal(D)); - break; - - case DeclarationName::CXXDestructorName: - Name = C.DeclarationNames.getCXXDestructorName(QualType::ReadVal(D)); - break; - - case DeclarationName::CXXConversionFunctionName: - Name - = C.DeclarationNames.getCXXConversionFunctionName(QualType::ReadVal(D)); - break; - - case DeclarationName::CXXOperatorName: { - OverloadedOperatorKind Op - = static_cast(D.ReadInt()); - Name = C.DeclarationNames.getCXXOperatorName(Op); - break; - } - - case DeclarationName::CXXUsingDirective: - Name = DeclarationName::getUsingDirectiveName(); - break; - } -} - -//===----------------------------------------------------------------------===// -// Common serialization logic for subclasses of ValueDecl. -//===----------------------------------------------------------------------===// - -void ValueDecl::EmitInRec(Serializer& S) const { - NamedDecl::EmitInRec(S); - S.Emit(getType()); // From ValueDecl. -} - -void ValueDecl::ReadInRec(Deserializer& D, ASTContext& C) { - NamedDecl::ReadInRec(D, C); - DeclType = QualType::ReadVal(D); // From ValueDecl. -} - -//===----------------------------------------------------------------------===// -// Common serialization logic for subclasses of VarDecl. -//===----------------------------------------------------------------------===// - -void VarDecl::EmitInRec(Serializer& S) const { - ValueDecl::EmitInRec(S); - S.EmitInt(getStorageClass()); // From VarDecl. - S.EmitBool(ThreadSpecified); - S.EmitBool(HasCXXDirectInit); - S.EmitBool(DeclaredInCondition); - S.EmitPtr(PreviousDeclaration); - S.Emit(TypeSpecStartLoc); -} - -void VarDecl::ReadInRec(Deserializer& D, ASTContext& C) { - ValueDecl::ReadInRec(D, C); - SClass = static_cast(D.ReadInt()); // From VarDecl. - ThreadSpecified = D.ReadBool(); - HasCXXDirectInit = D.ReadBool(); - DeclaredInCondition = D.ReadBool(); - D.ReadPtr(PreviousDeclaration); - TypeSpecStartLoc = SourceLocation::ReadVal(D); -} - -void VarDecl::EmitOutRec(Serializer& S) const { - // Emit this last because it will create a record of its own. - S.EmitOwnedPtr(getInit()); -} - -void VarDecl::ReadOutRec(Deserializer& D, ASTContext& C) { - Init = D.ReadOwnedPtr(C); -} - - -void VarDecl::EmitImpl(Serializer& S) const { - VarDecl::EmitInRec(S); - VarDecl::EmitOutRec(S); -} - -void VarDecl::ReadImpl(Deserializer& D, ASTContext& C) { - ReadInRec(D, C); - ReadOutRec(D, C); -} - -//===----------------------------------------------------------------------===// -// TranslationUnitDecl Serialization. -//===----------------------------------------------------------------------===// - -void TranslationUnitDecl::EmitImpl(llvm::Serializer& S) const -{ -} - -TranslationUnitDecl* TranslationUnitDecl::CreateImpl(Deserializer& D, - ASTContext& C) { - return new (C) TranslationUnitDecl(); -} - -//===----------------------------------------------------------------------===// -// NamespaceDecl Serialization. -//===----------------------------------------------------------------------===// - -void NamespaceDecl::EmitImpl(llvm::Serializer& S) const -{ - NamedDecl::EmitInRec(S); - S.Emit(getLBracLoc()); - S.Emit(getRBracLoc()); -} - -NamespaceDecl* NamespaceDecl::CreateImpl(Deserializer& D, ASTContext& C) { - NamespaceDecl* decl = new (C) NamespaceDecl(0, SourceLocation(), 0); - - decl->NamedDecl::ReadInRec(D, C); - decl->LBracLoc = SourceLocation::ReadVal(D); - decl->RBracLoc = SourceLocation::ReadVal(D); - - return decl; -} - -//===----------------------------------------------------------------------===// -// VarDecl Serialization. -//===----------------------------------------------------------------------===// - -VarDecl* VarDecl::CreateImpl(Deserializer& D, ASTContext& C) { - VarDecl* decl = - new (C) VarDecl(Var, 0, SourceLocation(), NULL, QualType(), None); - - decl->VarDecl::ReadImpl(D, C); - return decl; -} - -//===----------------------------------------------------------------------===// -// ParmVarDecl Serialization. -//===----------------------------------------------------------------------===// - -void ParmVarDecl::EmitImpl(llvm::Serializer& S) const { - VarDecl::EmitImpl(S); - S.EmitInt(getObjCDeclQualifier()); // From ParmVarDecl. - S.EmitOwnedPtr(getDefaultArg()); // From ParmVarDecl. -} - -ParmVarDecl* ParmVarDecl::CreateImpl(Deserializer& D, ASTContext& C) { - ParmVarDecl* decl = new (C) - ParmVarDecl(ParmVar, - 0, SourceLocation(), NULL, QualType(), None, NULL); - - decl->VarDecl::ReadImpl(D, C); - decl->objcDeclQualifier = static_cast(D.ReadInt()); - decl->DefaultArg = D.ReadOwnedPtr(C); - return decl; -} - -//===----------------------------------------------------------------------===// -// OriginalParmVarDecl Serialization. -//===----------------------------------------------------------------------===// - -void OriginalParmVarDecl::EmitImpl(llvm::Serializer& S) const { - ParmVarDecl::EmitImpl(S); - S.Emit(OriginalType); -} - -OriginalParmVarDecl* OriginalParmVarDecl::CreateImpl( - Deserializer& D, ASTContext& C) { - OriginalParmVarDecl* decl = new (C) - OriginalParmVarDecl(0, SourceLocation(), NULL, QualType(), - QualType(), None, NULL); - - decl->ParmVarDecl::ReadImpl(D, C); - decl->OriginalType = QualType::ReadVal(D); - return decl; -} -//===----------------------------------------------------------------------===// -// EnumDecl Serialization. -//===----------------------------------------------------------------------===// - -void EnumDecl::EmitImpl(Serializer& S) const { - NamedDecl::EmitInRec(S); - S.EmitBool(isDefinition()); - S.Emit(IntegerType); -} - -EnumDecl* EnumDecl::CreateImpl(Deserializer& D, ASTContext& C) { - EnumDecl* decl = new (C) EnumDecl(0, SourceLocation(), NULL); - - decl->NamedDecl::ReadInRec(D, C); - decl->setDefinition(D.ReadBool()); - decl->IntegerType = QualType::ReadVal(D); - - return decl; -} - -//===----------------------------------------------------------------------===// -// EnumConstantDecl Serialization. -//===----------------------------------------------------------------------===// - -void EnumConstantDecl::EmitImpl(Serializer& S) const { - S.Emit(Val); - ValueDecl::EmitInRec(S); - S.EmitOwnedPtr(Init); -} - -EnumConstantDecl* EnumConstantDecl::CreateImpl(Deserializer& D, ASTContext& C) { - llvm::APSInt val(1); - D.Read(val); - - EnumConstantDecl* decl = new (C) - EnumConstantDecl(0, SourceLocation(), NULL, QualType(), NULL, val); - - decl->ValueDecl::ReadInRec(D, C); - decl->Init = D.ReadOwnedPtr(C); - return decl; -} - -//===----------------------------------------------------------------------===// -// FieldDecl Serialization. -//===----------------------------------------------------------------------===// - -void FieldDecl::EmitImpl(Serializer& S) const { - S.EmitBool(Mutable); - S.Emit(getType()); - ValueDecl::EmitInRec(S); - S.EmitOwnedPtr(BitWidth); -} - -FieldDecl* FieldDecl::CreateImpl(Deserializer& D, ASTContext& C) { - FieldDecl* decl = new (C) FieldDecl(Field, 0, SourceLocation(), NULL, - QualType(), 0, false); - decl->Mutable = D.ReadBool(); - decl->ValueDecl::ReadInRec(D, C); - decl->BitWidth = D.ReadOwnedPtr(C); - return decl; -} - -//===----------------------------------------------------------------------===// -// FunctionDecl Serialization. -//===----------------------------------------------------------------------===// - -void FunctionDecl::EmitImpl(Serializer& S) const { - S.EmitInt(SClass); // From FunctionDecl. - S.EmitBool(IsInline); // From FunctionDecl. - ValueDecl::EmitInRec(S); - S.EmitPtr(PreviousDeclaration); - - // NOTE: We do not need to serialize out the number of parameters, because - // that is encoded in the type (accessed via getNumParams()). - - if (ParamInfo != NULL) { - S.EmitBool(true); - S.EmitInt(getNumParams()); - // FIXME: S.BatchEmitOwnedPtrs(getNumParams(),&ParamInfo[0], Body); - } - else { - S.EmitBool(false); - // FIXME: S.EmitOwnedPtr(Body); - } -} - -FunctionDecl* FunctionDecl::CreateImpl(Deserializer& D, ASTContext& C) { - StorageClass SClass = static_cast(D.ReadInt()); - bool IsInline = D.ReadBool(); - - FunctionDecl* decl = new (C) - FunctionDecl(Function, 0, SourceLocation(), DeclarationName(), - QualType(), SClass, IsInline); - - decl->ValueDecl::ReadInRec(D, C); - D.ReadPtr(decl->PreviousDeclaration); - - int numParams = 0; - bool hasParamDecls = D.ReadBool(); - if (hasParamDecls) - numParams = D.ReadInt(); - - decl->ParamInfo = hasParamDecls - ? new ParmVarDecl*[numParams] - : NULL; - - if (hasParamDecls) - D.BatchReadOwnedPtrs(numParams, - reinterpret_cast(&decl->ParamInfo[0]), - /*FIXME: decl->Body,*/ C); - else - decl->Body = D.ReadOwnedPtr(C); - - return decl; -} - -void BlockDecl::EmitImpl(Serializer& S) const { - // FIXME: what about arguments? - S.Emit(getCaretLocation()); - S.EmitOwnedPtr(Body); -} - -BlockDecl* BlockDecl::CreateImpl(Deserializer& D, ASTContext& C) { - QualType Q = QualType::ReadVal(D); - SourceLocation L = SourceLocation::ReadVal(D); - /*CompoundStmt* BodyStmt = cast(*/D.ReadOwnedPtr(C)/*)*/; - assert(0 && "Cannot deserialize BlockBlockExpr yet"); - // FIXME: need to handle parameters. - //return new BlockBlockExpr(L, Q, BodyStmt); - return 0; -} - -//===----------------------------------------------------------------------===// -// OverloadedFunctionDecl Serialization. -//===----------------------------------------------------------------------===// - -void OverloadedFunctionDecl::EmitImpl(Serializer& S) const { - NamedDecl::EmitInRec(S); - - S.EmitInt(getNumFunctions()); - for (unsigned func = 0; func < getNumFunctions(); ++func) - S.EmitPtr(Functions[func]); -} - -OverloadedFunctionDecl * -OverloadedFunctionDecl::CreateImpl(Deserializer& D, ASTContext& C) { - OverloadedFunctionDecl* decl = new (C) - OverloadedFunctionDecl(0, DeclarationName()); - - decl->NamedDecl::ReadInRec(D, C); - - unsigned numFunctions = D.ReadInt(); - decl->Functions.reserve(numFunctions); - for (unsigned func = 0; func < numFunctions; ++func) - D.ReadPtr(decl->Functions[func]); - - return decl; -} - -//===----------------------------------------------------------------------===// -// RecordDecl Serialization. -//===----------------------------------------------------------------------===// - -void RecordDecl::EmitImpl(Serializer& S) const { - S.EmitInt(getTagKind()); - - NamedDecl::EmitInRec(S); - S.EmitBool(isDefinition()); - S.EmitBool(hasFlexibleArrayMember()); - S.EmitBool(isAnonymousStructOrUnion()); -} - -RecordDecl* RecordDecl::CreateImpl(Deserializer& D, ASTContext& C) { - TagKind TK = TagKind(D.ReadInt()); - - RecordDecl* decl = new (C) RecordDecl(Record, TK, 0, SourceLocation(), NULL); - - decl->NamedDecl::ReadInRec(D, C); - decl->setDefinition(D.ReadBool()); - decl->setHasFlexibleArrayMember(D.ReadBool()); - decl->setAnonymousStructOrUnion(D.ReadBool()); - - return decl; -} - -//===----------------------------------------------------------------------===// -// TypedefDecl Serialization. -//===----------------------------------------------------------------------===// - -void TypedefDecl::EmitImpl(Serializer& S) const { - S.Emit(UnderlyingType); - NamedDecl::EmitInRec(S); -} - -TypedefDecl* TypedefDecl::CreateImpl(Deserializer& D, ASTContext& C) { - QualType T = QualType::ReadVal(D); - - TypedefDecl* decl = new (C) TypedefDecl(0, SourceLocation(), NULL, T); - - decl->NamedDecl::ReadInRec(D, C); - - return decl; -} - -//===----------------------------------------------------------------------===// -// TemplateTypeParmDecl Serialization. -//===----------------------------------------------------------------------===// - -void TemplateTypeParmDecl::EmitImpl(Serializer& S) const { - S.EmitBool(Typename); - TypeDecl::EmitInRec(S); -} - -TemplateTypeParmDecl * -TemplateTypeParmDecl::CreateImpl(Deserializer& D, ASTContext& C) { - bool Typename = D.ReadBool(); - TemplateTypeParmDecl *decl - = new (C) TemplateTypeParmDecl(0, SourceLocation(), 0, Typename, - QualType()); - decl->TypeDecl::ReadInRec(D, C); - return decl; -} - -//===----------------------------------------------------------------------===// -// NonTypeTemplateParmDecl Serialization. -//===----------------------------------------------------------------------===// -void NonTypeTemplateParmDecl::EmitImpl(Serializer& S) const { - S.EmitInt(Depth); - S.EmitInt(Position); - NamedDecl::Emit(S); -} - -NonTypeTemplateParmDecl* -NonTypeTemplateParmDecl::CreateImpl(Deserializer& D, ASTContext& C) { - unsigned Depth = D.ReadInt(); - unsigned Position = D.ReadInt(); - NonTypeTemplateParmDecl *decl - = new (C) NonTypeTemplateParmDecl(0, SourceLocation(), Depth, Position, - 0, QualType(), SourceLocation()); - decl->NamedDecl::ReadInRec(D, C); - return decl; -} - -//===----------------------------------------------------------------------===// -// TemplateTemplateParmDecl Serialization. -//===----------------------------------------------------------------------===// -void TemplateTemplateParmDecl::EmitImpl(Serializer& S) const { - S.EmitInt(Depth); - S.EmitInt(Position); - NamedDecl::EmitInRec(S); -} - -TemplateTemplateParmDecl* -TemplateTemplateParmDecl::CreateImpl(Deserializer& D, ASTContext& C) { - unsigned Depth = D.ReadInt(); - unsigned Position = D.ReadInt(); - TemplateTemplateParmDecl *decl - = new (C) TemplateTemplateParmDecl(0, SourceLocation(), Depth, Position, - 0, 0); - decl->NamedDecl::ReadInRec(D, C); - return decl; -} - -//===----------------------------------------------------------------------===// -// LinkageSpec Serialization. -//===----------------------------------------------------------------------===// - -void LinkageSpecDecl::EmitInRec(Serializer& S) const { - S.EmitInt(getLanguage()); - S.EmitBool(HadBraces); -} - -void LinkageSpecDecl::ReadInRec(Deserializer& D, ASTContext& C) { - Language = static_cast(D.ReadInt()); - HadBraces = D.ReadBool(); -} - -//===----------------------------------------------------------------------===// -// FileScopeAsm Serialization. -//===----------------------------------------------------------------------===// - -void FileScopeAsmDecl::EmitImpl(llvm::Serializer& S) const -{ - S.EmitOwnedPtr(AsmString); -} - -FileScopeAsmDecl* FileScopeAsmDecl::CreateImpl(Deserializer& D, ASTContext& C) { - FileScopeAsmDecl* decl = new (C) FileScopeAsmDecl(0, SourceLocation(), 0); - - decl->AsmString = cast(D.ReadOwnedPtr(C)); -// D.ReadOwnedPtr(D.ReadOwnedPtr())<#T * * Ptr#>, <#bool AutoRegister#>)(decl->AsmString); - - return decl; -} diff --git a/lib/AST/DeclarationName.cpp b/lib/AST/DeclarationName.cpp index e2ed892595..5cc0aab5ee 100644 --- a/lib/AST/DeclarationName.cpp +++ b/lib/AST/DeclarationName.cpp @@ -15,9 +15,8 @@ #include "clang/AST/Type.h" #include "clang/AST/Decl.h" #include "clang/Basic/IdentifierTable.h" +#include "llvm/ADT/DenseMap.h" #include "llvm/ADT/FoldingSet.h" -#include "llvm/Bitcode/Serialize.h" -#include "llvm/Bitcode/Deserialize.h" using namespace clang; namespace clang { diff --git a/lib/AST/StmtSerialization.cpp b/lib/AST/StmtSerialization.cpp deleted file mode 100644 index 7a37a16550..0000000000 --- a/lib/AST/StmtSerialization.cpp +++ /dev/null @@ -1,1602 +0,0 @@ -//===--- StmtSerialization.cpp - Serialization of Statements --------------===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file defines the type-specific methods for serializing statements -// and expressions. -// -//===----------------------------------------------------------------------===// - -#include "clang/Basic/TypeTraits.h" -#include "clang/AST/DeclCXX.h" -#include "clang/AST/Expr.h" -#include "clang/AST/ExprCXX.h" -#include "clang/AST/ExprObjC.h" -#include "clang/AST/ASTContext.h" -#include "llvm/Bitcode/Serialize.h" -#include "llvm/Bitcode/Deserialize.h" - -using namespace clang; -using llvm::Serializer; -using llvm::Deserializer; - -void Stmt::Emit(Serializer& S) const { - S.FlushRecord(); - S.EmitInt(getStmtClass()); - EmitImpl(S); - S.FlushRecord(); -} - -Stmt* Stmt::Create(Deserializer& D, ASTContext& C) { - StmtClass SC = static_cast(D.ReadInt()); - - switch (SC) { - default: - assert (false && "Not implemented."); - return NULL; - - case AddrLabelExprClass: - return AddrLabelExpr::CreateImpl(D, C); - - case ArraySubscriptExprClass: - return ArraySubscriptExpr::CreateImpl(D, C); - - case AsmStmtClass: - return AsmStmt::CreateImpl(D, C); - - case BinaryOperatorClass: - return BinaryOperator::CreateImpl(D, C); - - case BreakStmtClass: - return BreakStmt::CreateImpl(D, C); - - case CallExprClass: - return CallExpr::CreateImpl(D, C, CallExprClass); - - case CaseStmtClass: - return CaseStmt::CreateImpl(D, C); - - case CharacterLiteralClass: - return CharacterLiteral::CreateImpl(D, C); - - case ChooseExprClass: - return ChooseExpr::CreateImpl(D, C); - - case CompoundAssignOperatorClass: - return CompoundAssignOperator::CreateImpl(D, C); - - case CompoundLiteralExprClass: - return CompoundLiteralExpr::CreateImpl(D, C); - - case CompoundStmtClass: - return CompoundStmt::CreateImpl(D, C); - - case ConditionalOperatorClass: - return ConditionalOperator::CreateImpl(D, C); - - case ContinueStmtClass: - return ContinueStmt::CreateImpl(D, C); - - case DeclRefExprClass: - return DeclRefExpr::CreateImpl(D, C); - - case DeclStmtClass: - return DeclStmt::CreateImpl(D, C); - - case DefaultStmtClass: - return DefaultStmt::CreateImpl(D, C); - - case DoStmtClass: - return DoStmt::CreateImpl(D, C); - - case FloatingLiteralClass: - return FloatingLiteral::CreateImpl(D, C); - - case ForStmtClass: - return ForStmt::CreateImpl(D, C); - - case GNUNullExprClass: - return GNUNullExpr::CreateImpl(D, C); - - case GotoStmtClass: - return GotoStmt::CreateImpl(D, C); - - case IfStmtClass: - return IfStmt::CreateImpl(D, C); - - case ImaginaryLiteralClass: - return ImaginaryLiteral::CreateImpl(D, C); - - case ImplicitCastExprClass: - return ImplicitCastExpr::CreateImpl(D, C); - - case CStyleCastExprClass: - return CStyleCastExpr::CreateImpl(D, C); - - case IndirectGotoStmtClass: - return IndirectGotoStmt::CreateImpl(D, C); - - case InitListExprClass: - return InitListExpr::CreateImpl(D, C); - - case IntegerLiteralClass: - return IntegerLiteral::CreateImpl(D, C); - - case LabelStmtClass: - return LabelStmt::CreateImpl(D, C); - - case MemberExprClass: - return MemberExpr::CreateImpl(D, C); - - case NullStmtClass: - return NullStmt::CreateImpl(D, C); - - case ParenExprClass: - return ParenExpr::CreateImpl(D, C); - - case PredefinedExprClass: - return PredefinedExpr::CreateImpl(D, C); - - case ReturnStmtClass: - return ReturnStmt::CreateImpl(D, C); - - case SizeOfAlignOfExprClass: - return SizeOfAlignOfExpr::CreateImpl(D, C); - - case StmtExprClass: - return StmtExpr::CreateImpl(D, C); - - case StringLiteralClass: - return StringLiteral::CreateImpl(D, C); - - case SwitchStmtClass: - return SwitchStmt::CreateImpl(D, C); - - case UnaryOperatorClass: - return UnaryOperator::CreateImpl(D, C); - - case WhileStmtClass: - return WhileStmt::CreateImpl(D, C); - - //==--------------------------------------==// - // Objective C - //==--------------------------------------==// - - case ObjCAtCatchStmtClass: - return ObjCAtCatchStmt::CreateImpl(D, C); - - case ObjCAtFinallyStmtClass: - return ObjCAtFinallyStmt::CreateImpl(D, C); - - case ObjCAtSynchronizedStmtClass: - return ObjCAtSynchronizedStmt::CreateImpl(D, C); - - case ObjCAtThrowStmtClass: - return ObjCAtThrowStmt::CreateImpl(D, C); - - case ObjCAtTryStmtClass: - return ObjCAtTryStmt::CreateImpl(D, C); - - case ObjCEncodeExprClass: - return ObjCEncodeExpr::CreateImpl(D, C); - - case ObjCForCollectionStmtClass: - return ObjCForCollectionStmt::CreateImpl(D, C); - - case ObjCIvarRefExprClass: - return ObjCIvarRefExpr::CreateImpl(D, C); - - case ObjCMessageExprClass: - return ObjCMessageExpr::CreateImpl(D, C); - - case ObjCSelectorExprClass: - return ObjCSelectorExpr::CreateImpl(D, C); - - case ObjCStringLiteralClass: - return ObjCStringLiteral::CreateImpl(D, C); - - case ObjCSuperExprClass: - return ObjCSuperExpr::CreateImpl(D, C); - - //==--------------------------------------==// - // C++ - //==--------------------------------------==// - - case CXXOperatorCallExprClass: - return CXXOperatorCallExpr::CreateImpl(D, C, CXXOperatorCallExprClass); - - case CXXDefaultArgExprClass: - return CXXDefaultArgExpr::CreateImpl(D, C); - - case CXXFunctionalCastExprClass: - return CXXFunctionalCastExpr::CreateImpl(D, C); - - case CXXStaticCastExprClass: - return CXXStaticCastExpr::CreateImpl(D, C, SC); - - case CXXDynamicCastExprClass: - return CXXDynamicCastExpr::CreateImpl(D, C, SC); - - case CXXReinterpretCastExprClass: - return CXXReinterpretCastExpr::CreateImpl(D, C, SC); - - case CXXConstCastExprClass: - return CXXConstCastExpr::CreateImpl(D, C, SC); - - case CXXTypeidExprClass: - return CXXTypeidExpr::CreateImpl(D, C); - - case CXXThisExprClass: - return CXXThisExpr::CreateImpl(D, C); - - case CXXTemporaryObjectExprClass: - return CXXTemporaryObjectExpr::CreateImpl(D, C); - - case CXXZeroInitValueExprClass: - return CXXZeroInitValueExpr::CreateImpl(D, C); - - case CXXNewExprClass: - return CXXNewExpr::CreateImpl(D, C); - - case CXXDeleteExprClass: - return CXXDeleteExpr::CreateImpl(D, C); - - case UnresolvedFunctionNameExprClass: - return UnresolvedFunctionNameExpr::CreateImpl(D, C); - - case CXXCatchStmtClass: - return CXXCatchStmt::CreateImpl(D, C); - - case CXXTryStmtClass: - return CXXTryStmt::CreateImpl(D, C); - - case QualifiedDeclRefExprClass: - return QualifiedDeclRefExpr::CreateImpl(D, C); - } -} - -//===----------------------------------------------------------------------===// -// C Serialization -//===----------------------------------------------------------------------===// - -void AddrLabelExpr::EmitImpl(Serializer& S) const { - S.Emit(getType()); - S.Emit(AmpAmpLoc); - S.Emit(LabelLoc); - S.EmitPtr(Label); -} - -AddrLabelExpr* AddrLabelExpr::CreateImpl(Deserializer& D, ASTContext& C) { - QualType t = QualType::ReadVal(D); - SourceLocation AALoc = SourceLocation::ReadVal(D); - SourceLocation LLoc = SourceLocation::ReadVal(D); - AddrLabelExpr* expr = new (C, llvm::alignof()) - AddrLabelExpr(AALoc,LLoc,NULL,t); - D.ReadPtr(expr->Label); // Pointer may be backpatched. - return expr; -} - -void ArraySubscriptExpr::EmitImpl(Serializer& S) const { - S.Emit(getType()); - S.Emit(RBracketLoc); - S.BatchEmitOwnedPtrs(getLHS(),getRHS()); -} - -ArraySubscriptExpr* ArraySubscriptExpr::CreateImpl(Deserializer& D, ASTContext& C) { - QualType t = QualType::ReadVal(D); - SourceLocation L = SourceLocation::ReadVal(D); - Expr *LHS, *RHS; - D.BatchReadOwnedPtrs(LHS, RHS, C); - return new (C, llvm::alignof()) - ArraySubscriptExpr(LHS,RHS,t,L); -} - -void AsmStmt::EmitImpl(Serializer& S) const { - S.Emit(AsmLoc); - - getAsmString()->EmitImpl(S); - S.Emit(RParenLoc); - - S.EmitBool(IsVolatile); - S.EmitBool(IsSimple); - S.EmitInt(NumOutputs); - S.EmitInt(NumInputs); - - unsigned size = NumOutputs + NumInputs; - - for (unsigned i = 0; i < size; ++i) - S.EmitCStr(Names[i].c_str()); - - for (unsigned i = 0; i < size; ++i) - Constraints[i]->EmitImpl(S); - - for (unsigned i = 0; i < size; ++i) - S.EmitOwnedPtr(Exprs[i]); - - S.EmitInt(Clobbers.size()); - for (unsigned i = 0, e = Clobbers.size(); i != e; ++i) - Clobbers[i]->EmitImpl(S); -} - -AsmStmt* AsmStmt::CreateImpl(Deserializer& D, ASTContext& C) { - SourceLocation ALoc = SourceLocation::ReadVal(D); - StringLiteral *AsmStr = StringLiteral::CreateImpl(D, C); - SourceLocation PLoc = SourceLocation::ReadVal(D); - - bool IsVolatile = D.ReadBool(); - bool IsSimple = D.ReadBool(); - AsmStmt *Stmt = new (C, llvm::alignof()) - AsmStmt(ALoc, IsSimple, IsVolatile, 0, 0, 0, 0, 0, AsmStr, 0, 0, PLoc); - - Stmt->NumOutputs = D.ReadInt(); - Stmt->NumInputs = D.ReadInt(); - - unsigned size = Stmt->NumOutputs + Stmt->NumInputs; - - Stmt->Names.reserve(size); - for (unsigned i = 0; i < size; ++i) { - std::vector data; - D.ReadCStr(data, false); - - Stmt->Names.push_back(std::string(data.begin(), data.end())); - } - - Stmt->Constraints.reserve(size); - for (unsigned i = 0; i < size; ++i) - 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(C)); - - unsigned NumClobbers = D.ReadInt(); - Stmt->Clobbers.reserve(NumClobbers); - for (unsigned i = 0; i < NumClobbers; ++i) - Stmt->Clobbers.push_back(StringLiteral::CreateImpl(D, C)); - - return Stmt; -} - -void BinaryOperator::EmitImpl(Serializer& S) const { - S.EmitInt(Opc); - S.Emit(OpLoc);; - S.Emit(getType()); - S.BatchEmitOwnedPtrs(getLHS(),getRHS()); -} - -BinaryOperator* BinaryOperator::CreateImpl(Deserializer& D, ASTContext& C) { - Opcode Opc = static_cast(D.ReadInt()); - SourceLocation OpLoc = SourceLocation::ReadVal(D); - QualType Result = QualType::ReadVal(D); - Expr *LHS, *RHS; - D.BatchReadOwnedPtrs(LHS, RHS, C); - - return new (C, llvm::alignof()) - BinaryOperator(LHS,RHS,Opc,Result,OpLoc); -} - -void BreakStmt::EmitImpl(Serializer& S) const { - S.Emit(BreakLoc); -} - -BreakStmt* BreakStmt::CreateImpl(Deserializer& D, ASTContext& C) { - SourceLocation Loc = SourceLocation::ReadVal(D); - return new (C, llvm::alignof()) BreakStmt(Loc); -} - -void CallExpr::EmitImpl(Serializer& S) const { - S.Emit(getType()); - S.Emit(RParenLoc); - S.EmitInt(NumArgs); - S.BatchEmitOwnedPtrs(NumArgs+1, SubExprs); -} - -CallExpr* CallExpr::CreateImpl(Deserializer& D, ASTContext& C, StmtClass SC) { - QualType t = QualType::ReadVal(D); - SourceLocation L = SourceLocation::ReadVal(D); - unsigned NumArgs = D.ReadInt(); - Stmt** SubExprs = new (C, llvm::alignof()) Stmt*[NumArgs+1]; - D.BatchReadOwnedPtrs(NumArgs+1, SubExprs, C); - return new (C, llvm::alignof()) CallExpr(SC, SubExprs,NumArgs,t,L); -} - -void CaseStmt::EmitImpl(Serializer& S) const { - S.Emit(CaseLoc); - S.EmitPtr(getNextSwitchCase()); - S.BatchEmitOwnedPtrs((unsigned) END_EXPR,&SubExprs[0]); -} - -CaseStmt* CaseStmt::CreateImpl(Deserializer& D, ASTContext& C) { - SourceLocation CaseLoc = SourceLocation::ReadVal(D); - CaseStmt* stmt = new (C, llvm::alignof()) - CaseStmt(NULL,NULL,CaseLoc); - D.ReadPtr(stmt->NextSwitchCase); - D.BatchReadOwnedPtrs((unsigned) END_EXPR, &stmt->SubExprs[0], C); - return stmt; -} - -void CStyleCastExpr::EmitImpl(Serializer& S) const { - S.Emit(getType()); - S.Emit(getTypeAsWritten()); - S.Emit(LPLoc); - S.Emit(RPLoc); - S.EmitOwnedPtr(getSubExpr()); -} - -CStyleCastExpr* CStyleCastExpr::CreateImpl(Deserializer& D, ASTContext& C) { - QualType t = QualType::ReadVal(D); - QualType writtenTy = QualType::ReadVal(D); - SourceLocation LPLoc = SourceLocation::ReadVal(D); - SourceLocation RPLoc = SourceLocation::ReadVal(D); - Expr* Op = D.ReadOwnedPtr(C); - return new (C, llvm::alignof()) - CStyleCastExpr(t,Op,writtenTy,LPLoc,RPLoc); -} - -void CharacterLiteral::EmitImpl(Serializer& S) const { - S.Emit(Value); - S.Emit(Loc); - S.EmitBool(IsWide); - S.Emit(getType()); -} - -CharacterLiteral* CharacterLiteral::CreateImpl(Deserializer& D, ASTContext& C) { - unsigned value = D.ReadInt(); - SourceLocation Loc = SourceLocation::ReadVal(D); - bool iswide = D.ReadBool(); - QualType T = QualType::ReadVal(D); - return new (C, llvm::alignof()) - CharacterLiteral(value,iswide,T,Loc); -} - -void CompoundAssignOperator::EmitImpl(Serializer& S) const { - S.Emit(getType()); - S.Emit(ComputationLHSType); - S.Emit(ComputationResultType); - S.Emit(getOperatorLoc()); - S.EmitInt(getOpcode()); - S.BatchEmitOwnedPtrs(getLHS(),getRHS()); -} - -CompoundAssignOperator* -CompoundAssignOperator::CreateImpl(Deserializer& D, ASTContext& C) { - QualType t = QualType::ReadVal(D); - QualType cl = QualType::ReadVal(D); - QualType cr = QualType::ReadVal(D); - SourceLocation L = SourceLocation::ReadVal(D); - Opcode Opc = static_cast(D.ReadInt()); - Expr* LHS, *RHS; - D.BatchReadOwnedPtrs(LHS, RHS, C); - - return new (C, llvm::alignof()) - CompoundAssignOperator(LHS,RHS,Opc,t,cl,cr,L); -} - -void CompoundLiteralExpr::EmitImpl(Serializer& S) const { - S.Emit(getType()); - S.Emit(getLParenLoc()); - S.EmitBool(isFileScope()); - S.EmitOwnedPtr(Init); -} - -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(C); - return new (C, llvm::alignof()) - CompoundLiteralExpr(L, Q, Init, fileScope); -} - -void CompoundStmt::EmitImpl(Serializer& S) const { - S.Emit(LBracLoc); - S.Emit(RBracLoc); - S.Emit(NumStmts); - if (NumStmts) S.BatchEmitOwnedPtrs(NumStmts, &Body[0]); -} - -CompoundStmt* CompoundStmt::CreateImpl(Deserializer& D, ASTContext& C) { - SourceLocation LB = SourceLocation::ReadVal(D); - SourceLocation RB = SourceLocation::ReadVal(D); - unsigned size = D.ReadInt(); - - CompoundStmt* stmt = new (C, llvm::alignof()) - CompoundStmt(C, NULL, 0, LB, RB); - - stmt->NumStmts = size; - - if (size) { - stmt->Body = new (C) Stmt*[size]; - D.BatchReadOwnedPtrs(size, &stmt->Body[0], C); - } - - return stmt; -} - -void ConditionalOperator::EmitImpl(Serializer& S) const { - S.Emit(getType()); - S.BatchEmitOwnedPtrs((unsigned) END_EXPR, SubExprs); -} - -ConditionalOperator* ConditionalOperator::CreateImpl(Deserializer& D, - ASTContext& C) { - - QualType t = QualType::ReadVal(D); - ConditionalOperator* c = new (C, llvm::alignof()) - ConditionalOperator(NULL,NULL,NULL,t); - D.BatchReadOwnedPtrs((unsigned) END_EXPR, c->SubExprs, C); - return c; -} - -void ContinueStmt::EmitImpl(Serializer& S) const { - S.Emit(ContinueLoc); -} - -ContinueStmt* ContinueStmt::CreateImpl(Deserializer& D, ASTContext& C) { - SourceLocation Loc = SourceLocation::ReadVal(D); - return new ContinueStmt(Loc); -} - -void DeclStmt::EmitImpl(Serializer& S) const { - S.Emit(StartLoc); - S.Emit(EndLoc); - S.Emit(DG); -} - -DeclStmt* DeclStmt::CreateImpl(Deserializer& D, ASTContext& C) { - SourceLocation StartLoc = SourceLocation::ReadVal(D); - SourceLocation EndLoc = SourceLocation::ReadVal(D); - return new DeclStmt(DeclGroupRef::ReadVal(D), StartLoc, EndLoc); -} - -void DeclRefExpr::EmitImpl(Serializer& S) const { - S.Emit(Loc); - S.Emit(getType()); - S.EmitPtr(getDecl()); -} - -DeclRefExpr* DeclRefExpr::CreateImpl(Deserializer& D, ASTContext& C) { - SourceLocation Loc = SourceLocation::ReadVal(D); - QualType T = QualType::ReadVal(D); - DeclRefExpr *DRE = new DeclRefExpr(0, T, Loc); - D.ReadPtr(DRE->D); - return DRE; -} - -void DefaultStmt::EmitImpl(Serializer& S) const { - S.Emit(DefaultLoc); - S.EmitOwnedPtr(getSubStmt()); - S.EmitPtr(getNextSwitchCase()); -} - -DefaultStmt* DefaultStmt::CreateImpl(Deserializer& D, ASTContext& C) { - SourceLocation Loc = SourceLocation::ReadVal(D); - Stmt* SubStmt = D.ReadOwnedPtr(C); - - DefaultStmt* stmt = new DefaultStmt(Loc,SubStmt); - stmt->setNextSwitchCase(D.ReadPtr()); - - return stmt; -} - -void DoStmt::EmitImpl(Serializer& S) const { - S.Emit(DoLoc); - S.EmitOwnedPtr(getCond()); - S.EmitOwnedPtr(getBody()); -} - -DoStmt* DoStmt::CreateImpl(Deserializer& D, ASTContext& C) { - SourceLocation DoLoc = SourceLocation::ReadVal(D); - Expr* Cond = D.ReadOwnedPtr(C); - Stmt* Body = D.ReadOwnedPtr(C); - return new DoStmt(Body,Cond,DoLoc); -} - -void FloatingLiteral::EmitImpl(Serializer& S) const { - S.Emit(Loc); - S.Emit(getType()); - S.EmitBool(isExact()); - S.Emit(Value); -} - -FloatingLiteral* FloatingLiteral::CreateImpl(Deserializer& D, ASTContext& C) { - SourceLocation Loc = SourceLocation::ReadVal(D); - QualType t = QualType::ReadVal(D); - bool isExact = D.ReadBool(); - llvm::APFloat Val = llvm::APFloat::ReadVal(D); - FloatingLiteral* expr = new FloatingLiteral(Val,&isExact,t,Loc); - return expr; -} - -void ForStmt::EmitImpl(Serializer& S) const { - S.Emit(ForLoc); - S.EmitOwnedPtr(getInit()); - S.EmitOwnedPtr(getCond()); - S.EmitOwnedPtr(getInc()); - S.EmitOwnedPtr(getBody()); -} - -ForStmt* ForStmt::CreateImpl(Deserializer& D, ASTContext& C) { - SourceLocation ForLoc = SourceLocation::ReadVal(D); - Stmt* Init = D.ReadOwnedPtr(C); - Expr* Cond = D.ReadOwnedPtr(C); - Expr* Inc = D.ReadOwnedPtr(C); - Stmt* Body = D.ReadOwnedPtr(C); - return new ForStmt(Init,Cond,Inc,Body,ForLoc); -} - -void GotoStmt::EmitImpl(Serializer& S) const { - S.Emit(GotoLoc); - S.Emit(LabelLoc); - S.EmitPtr(Label); -} - -GotoStmt* GotoStmt::CreateImpl(Deserializer& D, ASTContext& C) { - SourceLocation GotoLoc = SourceLocation::ReadVal(D); - SourceLocation LabelLoc = SourceLocation::ReadVal(D); - GotoStmt* stmt = new GotoStmt(NULL,GotoLoc,LabelLoc); - D.ReadPtr(stmt->Label); // This pointer may be backpatched later. - return stmt; -} - -void IfStmt::EmitImpl(Serializer& S) const { - S.Emit(IfLoc); - S.EmitOwnedPtr(getCond()); - S.EmitOwnedPtr(getThen()); - S.EmitOwnedPtr(getElse()); -} - -IfStmt* IfStmt::CreateImpl(Deserializer& D, ASTContext& C) { - SourceLocation L = SourceLocation::ReadVal(D); - Expr* Cond = D.ReadOwnedPtr(C); - Stmt* Then = D.ReadOwnedPtr(C); - Stmt* Else = D.ReadOwnedPtr(C); - return new IfStmt(L,Cond,Then,Else); -} - -void ImaginaryLiteral::EmitImpl(Serializer& S) const { - S.Emit(getType()); - S.EmitOwnedPtr(Val); -} - -ImaginaryLiteral* ImaginaryLiteral::CreateImpl(Deserializer& D, ASTContext& C) { - QualType t = QualType::ReadVal(D); - Expr* expr = D.ReadOwnedPtr(C); - assert (isa(expr) || isa(expr)); - return new ImaginaryLiteral(expr,t); -} - -void ImplicitCastExpr::EmitImpl(Serializer& S) const { - S.Emit(getType()); - S.EmitOwnedPtr(getSubExpr()); - S.Emit(LvalueCast); -} - -ImplicitCastExpr* ImplicitCastExpr::CreateImpl(Deserializer& D, ASTContext& C) { - QualType t = QualType::ReadVal(D); - Expr* Op = D.ReadOwnedPtr(C); - bool isLvalue = D.ReadBool(); - return new ImplicitCastExpr(t,Op,isLvalue); -} - -void IndirectGotoStmt::EmitImpl(Serializer& S) const { - S.EmitOwnedPtr(Target); -} - -IndirectGotoStmt* IndirectGotoStmt::CreateImpl(Deserializer& D, ASTContext& C) { - Expr* Target = D.ReadOwnedPtr(C); - return new IndirectGotoStmt(SourceLocation(), Target); -} - -void InitListExpr::EmitImpl(Serializer& S) const { - S.Emit(LBraceLoc); - S.Emit(RBraceLoc); - S.EmitInt(InitExprs.size()); - if (!InitExprs.empty()) S.BatchEmitOwnedPtrs(InitExprs.size(), &InitExprs[0]); -} - -InitListExpr* InitListExpr::CreateImpl(Deserializer& D, ASTContext& C) { - InitListExpr* expr = new InitListExpr(); - expr->LBraceLoc = SourceLocation::ReadVal(D); - expr->RBraceLoc = SourceLocation::ReadVal(D); - unsigned size = D.ReadInt(); - assert(size); - expr->InitExprs.reserve(size); - for (unsigned i = 0 ; i < size; ++i) expr->InitExprs.push_back(0); - - D.BatchReadOwnedPtrs(size, &expr->InitExprs[0], C); - return expr; -} - -void IntegerLiteral::EmitImpl(Serializer& S) const { - S.Emit(Loc); - S.Emit(getType()); - S.Emit(getValue()); -} - -IntegerLiteral* IntegerLiteral::CreateImpl(Deserializer& D, ASTContext& C) { - SourceLocation Loc = SourceLocation::ReadVal(D); - QualType T = QualType::ReadVal(D); - - // Create a dummy APInt because it is more efficient to deserialize - // it in place with the deserialized IntegerLiteral. (fewer copies) - llvm::APInt temp; - IntegerLiteral* expr = new IntegerLiteral(temp,T,Loc); - D.Read(expr->Value); - - return expr; -} - -void LabelStmt::EmitImpl(Serializer& S) const { - S.EmitPtr(Label); - S.Emit(IdentLoc); - S.EmitOwnedPtr(SubStmt); -} - -LabelStmt* LabelStmt::CreateImpl(Deserializer& D, ASTContext& C) { - IdentifierInfo* Label = D.ReadPtr(); - SourceLocation IdentLoc = SourceLocation::ReadVal(D); - Stmt* SubStmt = D.ReadOwnedPtr(C); - return new LabelStmt(IdentLoc,Label,SubStmt); -} - -void MemberExpr::EmitImpl(Serializer& S) const { - S.Emit(MemberLoc); - S.EmitPtr(MemberDecl); - S.EmitBool(IsArrow); - S.Emit(getType()); - S.EmitOwnedPtr(Base); -} - -MemberExpr* MemberExpr::CreateImpl(Deserializer& D, ASTContext& C) { - SourceLocation L = SourceLocation::ReadVal(D); - NamedDecl* MemberDecl = cast(D.ReadPtr()); - bool IsArrow = D.ReadBool(); - QualType T = QualType::ReadVal(D); - Expr* base = D.ReadOwnedPtr(C); - - return new MemberExpr(base,IsArrow,MemberDecl,L,T); -} - -void NullStmt::EmitImpl(Serializer& S) const { - S.Emit(SemiLoc); -} - -NullStmt* NullStmt::CreateImpl(Deserializer& D, ASTContext& C) { - SourceLocation SemiLoc = SourceLocation::ReadVal(D); - return new NullStmt(SemiLoc); -} - -void ParenExpr::EmitImpl(Serializer& S) const { - S.Emit(L); - S.Emit(R); - S.EmitOwnedPtr(Val); -} - -ParenExpr* ParenExpr::CreateImpl(Deserializer& D, ASTContext& C) { - SourceLocation L = SourceLocation::ReadVal(D); - SourceLocation R = SourceLocation::ReadVal(D); - Expr* val = D.ReadOwnedPtr(C); - return new ParenExpr(L,R,val); -} - -void PredefinedExpr::EmitImpl(Serializer& S) const { - S.Emit(Loc); - S.EmitInt(getIdentType()); - S.Emit(getType()); -} - -PredefinedExpr* PredefinedExpr::CreateImpl(Deserializer& D, ASTContext& C) { - SourceLocation Loc = SourceLocation::ReadVal(D); - IdentType it = static_cast(D.ReadInt()); - QualType Q = QualType::ReadVal(D); - return new PredefinedExpr(Loc,Q,it); -} - -void ReturnStmt::EmitImpl(Serializer& S) const { - S.Emit(RetLoc); - S.EmitOwnedPtr(RetExpr); -} - -ReturnStmt* ReturnStmt::CreateImpl(Deserializer& D, ASTContext& C) { - SourceLocation RetLoc = SourceLocation::ReadVal(D); - Expr* RetExpr = D.ReadOwnedPtr(C); - return new ReturnStmt(RetLoc,RetExpr); -} - -void SizeOfAlignOfExpr::EmitImpl(Serializer& S) const { - S.EmitBool(isSizeof); - S.EmitBool(isType); - if (isType) - S.Emit(getArgumentType()); - else - S.EmitOwnedPtr(getArgumentExpr()); - S.Emit(getType()); - S.Emit(OpLoc); - S.Emit(RParenLoc); -} - -SizeOfAlignOfExpr* -SizeOfAlignOfExpr::CreateImpl(Deserializer& D, ASTContext& C) { - bool isSizeof = D.ReadBool(); - bool isType = D.ReadBool(); - void *Argument; - if (isType) - Argument = QualType::ReadVal(D).getAsOpaquePtr(); - else - Argument = D.ReadOwnedPtr(C); - QualType Res = QualType::ReadVal(D); - SourceLocation OpLoc = SourceLocation::ReadVal(D); - SourceLocation RParenLoc = SourceLocation::ReadVal(D); - - if (isType) - return new (C) SizeOfAlignOfExpr(isSizeof, - QualType::getFromOpaquePtr(Argument), - Res, OpLoc, RParenLoc); - - return new (C) SizeOfAlignOfExpr(isSizeof, (Expr *)Argument, - Res, OpLoc, RParenLoc); -} - -void StmtExpr::EmitImpl(Serializer& S) const { - S.Emit(getType()); - S.Emit(LParenLoc); - S.Emit(RParenLoc); - S.EmitOwnedPtr(SubStmt); -} - -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(D.ReadOwnedPtr(C)); - return new StmtExpr(SubStmt,t,L,R); -} - -void TypesCompatibleExpr::EmitImpl(llvm::Serializer& S) const { - S.Emit(getType()); - S.Emit(BuiltinLoc); - S.Emit(RParenLoc); - S.Emit(Type1); - S.Emit(Type2); -} - -TypesCompatibleExpr* TypesCompatibleExpr::CreateImpl(llvm::Deserializer& D, - ASTContext& C) { - QualType RT = QualType::ReadVal(D); - SourceLocation BL = SourceLocation::ReadVal(D); - SourceLocation RP = SourceLocation::ReadVal(D); - QualType T1 = QualType::ReadVal(D); - QualType T2 = QualType::ReadVal(D); - return new TypesCompatibleExpr(RT, BL, T1, T2, RP); -} - -void ShuffleVectorExpr::EmitImpl(llvm::Serializer& S) const { - S.Emit(getType()); - S.Emit(BuiltinLoc); - S.Emit(RParenLoc); - S.EmitInt(NumExprs); - S.BatchEmitOwnedPtrs(NumExprs, &SubExprs[0]); -} - -ShuffleVectorExpr* ShuffleVectorExpr::CreateImpl(llvm::Deserializer& D, - ASTContext& C) { - QualType T = QualType::ReadVal(D); - SourceLocation BL = SourceLocation::ReadVal(D); - SourceLocation RP = SourceLocation::ReadVal(D); - unsigned NumExprs = D.ReadInt(); - // FIXME: Avoid extra allocation. - llvm::SmallVector Exprs(NumExprs); - D.BatchReadOwnedPtrs(NumExprs, Exprs.begin(), C); - return new ShuffleVectorExpr(Exprs.begin(), NumExprs, T, BL, RP); -} - -void ChooseExpr::EmitImpl(llvm::Serializer& S) const { - S.Emit(getType()); - S.Emit(BuiltinLoc); - S.Emit(RParenLoc); - S.BatchEmitOwnedPtrs((unsigned) END_EXPR, &SubExprs[0]); -} - -ChooseExpr* ChooseExpr::CreateImpl(llvm::Deserializer& D, ASTContext& C) { - QualType T = QualType::ReadVal(D); - SourceLocation BL = SourceLocation::ReadVal(D); - SourceLocation RP = SourceLocation::ReadVal(D); - ChooseExpr *CE = new ChooseExpr(BL, 0, 0, 0, T, RP); - D.BatchReadOwnedPtrs((unsigned) END_EXPR, &CE->SubExprs[0], C); - return CE; -} - -void GNUNullExpr::EmitImpl(llvm::Serializer &S) const { - S.Emit(getType()); - S.Emit(TokenLoc); -} - -GNUNullExpr *GNUNullExpr::CreateImpl(llvm::Deserializer &D, ASTContext &C) { - QualType T = QualType::ReadVal(D); - SourceLocation TL = SourceLocation::ReadVal(D); - return new GNUNullExpr(T, TL); -} - -void VAArgExpr::EmitImpl(llvm::Serializer& S) const { - S.Emit(getType()); - S.Emit(BuiltinLoc); - S.Emit(RParenLoc); - S.EmitOwnedPtr(getSubExpr()); -} - -VAArgExpr* VAArgExpr::CreateImpl(llvm::Deserializer& D, ASTContext& C) { - QualType T = QualType::ReadVal(D); - SourceLocation BL = SourceLocation::ReadVal(D); - SourceLocation RP = SourceLocation::ReadVal(D); - Expr *E = D.ReadOwnedPtr(C); - return new VAArgExpr(BL, E, T, RP); -} - -void StringLiteral::EmitImpl(Serializer& S) const { - S.Emit(getType()); - assert(0 && "Unimpl loc serialization"); - S.EmitBool(isWide()); - S.Emit(getByteLength()); - - for (unsigned i = 0 ; i < ByteLength; ++i) - S.EmitInt(StrData[i]); -} - -StringLiteral* StringLiteral::CreateImpl(Deserializer& D, ASTContext& C) { - QualType t = QualType::ReadVal(D); - assert(0 && "Unimpl loc serialization"); - //SourceLocation firstTokLoc = SourceLocation::ReadVal(D); - //SourceLocation lastTokLoc = SourceLocation::ReadVal(D); - bool isWide = D.ReadBool(); - unsigned ByteLength = D.ReadInt(); - - StringLiteral* sl = StringLiteral::Create(C, NULL, 0, isWide, t, - SourceLocation()); - - char* StrData = new (C, llvm::alignof()) char[ByteLength]; - for (unsigned i = 0; i < ByteLength; ++i) - StrData[i] = (char) D.ReadInt(); - - sl->ByteLength = ByteLength; - sl->StrData = StrData; - - return sl; -} - -void SwitchStmt::EmitImpl(Serializer& S) const { - S.Emit(SwitchLoc); - S.EmitOwnedPtr(getCond()); - S.EmitOwnedPtr(getBody()); - S.EmitPtr(FirstCase); -} - -SwitchStmt* SwitchStmt::CreateImpl(Deserializer& D, ASTContext& C) { - SourceLocation Loc = SourceLocation::ReadVal(D); - Stmt* Cond = D.ReadOwnedPtr(C); - Stmt* Body = D.ReadOwnedPtr(C); - SwitchCase* FirstCase = cast(D.ReadPtr()); - - SwitchStmt* stmt = new SwitchStmt(cast(Cond)); - stmt->setBody(Body,Loc); - stmt->FirstCase = FirstCase; - - return stmt; -} - -void UnaryOperator::EmitImpl(Serializer& S) const { - S.Emit(getType()); - S.Emit(Loc); - S.EmitInt(Opc); - S.EmitOwnedPtr(Val); -} - -UnaryOperator* UnaryOperator::CreateImpl(Deserializer& D, ASTContext& C) { - QualType t = QualType::ReadVal(D); - SourceLocation L = SourceLocation::ReadVal(D); - Opcode Opc = static_cast(D.ReadInt()); - Expr* Val = D.ReadOwnedPtr(C); - return new UnaryOperator(Val,Opc,t,L); -} - -void WhileStmt::EmitImpl(Serializer& S) const { - S.Emit(WhileLoc); - S.EmitOwnedPtr(getCond()); - S.EmitOwnedPtr(getBody()); -} - -WhileStmt* WhileStmt::CreateImpl(Deserializer& D, ASTContext& C) { - SourceLocation WhileLoc = SourceLocation::ReadVal(D); - Expr* Cond = D.ReadOwnedPtr(C); - Stmt* Body = D.ReadOwnedPtr(C); - return new WhileStmt(Cond,Body,WhileLoc); -} - -//===----------------------------------------------------------------------===// -// Objective C Serialization -//===----------------------------------------------------------------------===// - -void ObjCAtCatchStmt::EmitImpl(Serializer& S) const { - S.Emit(AtCatchLoc); - S.Emit(RParenLoc); - S.BatchEmitOwnedPtrs((unsigned) END_EXPR, &SubExprs[0]); -} - -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], C); - - return stmt; -} - -void ObjCAtFinallyStmt::EmitImpl(Serializer& S) const { - S.Emit(AtFinallyLoc); - S.EmitOwnedPtr(AtFinallyStmt); -} - -ObjCAtFinallyStmt* ObjCAtFinallyStmt::CreateImpl(Deserializer& D, ASTContext& C) { - SourceLocation Loc = SourceLocation::ReadVal(D); - Stmt* AtFinallyStmt = D.ReadOwnedPtr(C); - return new ObjCAtFinallyStmt(Loc,AtFinallyStmt); -} - -void ObjCAtSynchronizedStmt::EmitImpl(Serializer& S) const { - S.Emit(AtSynchronizedLoc); - S.BatchEmitOwnedPtrs((unsigned) END_EXPR,&SubStmts[0]); - } - -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], C); - return stmt; -} - -void ObjCAtThrowStmt::EmitImpl(Serializer& S) const { - S.Emit(AtThrowLoc); - S.EmitOwnedPtr(Throw); -} - -ObjCAtThrowStmt* ObjCAtThrowStmt::CreateImpl(Deserializer& D, ASTContext& C) { - SourceLocation L = SourceLocation::ReadVal(D); - Stmt* Throw = D.ReadOwnedPtr(C); - return new ObjCAtThrowStmt(L,Throw); -} - -void ObjCAtTryStmt::EmitImpl(Serializer& S) const { - S.Emit(AtTryLoc); - S.BatchEmitOwnedPtrs((unsigned) END_EXPR, &SubStmts[0]); -} - -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], C); - return stmt; -} - -void ObjCEncodeExpr::EmitImpl(Serializer& S) const { - S.Emit(AtLoc); - S.Emit(RParenLoc); - S.Emit(getType()); - S.Emit(EncType); -} - -ObjCEncodeExpr* ObjCEncodeExpr::CreateImpl(Deserializer& D, ASTContext& C) { - SourceLocation AtLoc = SourceLocation::ReadVal(D); - SourceLocation RParenLoc = SourceLocation::ReadVal(D); - QualType T = QualType::ReadVal(D); - QualType ET = QualType::ReadVal(D); - return new ObjCEncodeExpr(T,ET,AtLoc,RParenLoc); -} - -void ObjCForCollectionStmt::EmitImpl(Serializer& S) const { - S.Emit(ForLoc); - S.Emit(RParenLoc); - S.BatchEmitOwnedPtrs(getElement(),getCollection(),getBody()); -} - -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, C); - return new ObjCForCollectionStmt(Element,Collection,Body,ForLoc, RParenLoc); -} - -void ObjCProtocolExpr::EmitImpl(llvm::Serializer& S) const { - S.Emit(getType()); - S.EmitPtr(Protocol); - S.Emit(AtLoc); - S.Emit(RParenLoc); -} - -ObjCProtocolExpr* ObjCProtocolExpr::CreateImpl(llvm::Deserializer& D, - ASTContext& C) { - QualType T = QualType::ReadVal(D); - ObjCProtocolDecl *PD = D.ReadPtr(); - SourceLocation AL = SourceLocation::ReadVal(D); - SourceLocation RP = SourceLocation::ReadVal(D); - return new ObjCProtocolExpr(T, PD, AL, RP); -} - -void ObjCIvarRefExpr::EmitImpl(Serializer& S) const { - S.Emit(Loc); - S.Emit(getType()); - S.EmitPtr(getDecl()); -} - -ObjCIvarRefExpr* ObjCIvarRefExpr::CreateImpl(Deserializer& D, ASTContext& C) { - SourceLocation Loc = SourceLocation::ReadVal(D); - QualType T = QualType::ReadVal(D); - ObjCIvarRefExpr* dr = new ObjCIvarRefExpr(NULL,T,Loc); - D.ReadPtr(dr->D,false); - return dr; -} - -void ObjCPropertyRefExpr::EmitImpl(Serializer& S) const { - S.Emit(IdLoc); - S.Emit(getType()); - S.EmitPtr(getProperty()); -} - -void ObjCKVCRefExpr::EmitImpl(Serializer& S) const { - S.Emit(Loc); - S.Emit(getType()); - S.EmitPtr(getGetterMethod()); - S.EmitPtr(getSetterMethod()); -} - -ObjCPropertyRefExpr* ObjCPropertyRefExpr::CreateImpl(Deserializer& D, - ASTContext& C) { - SourceLocation Loc = SourceLocation::ReadVal(D); - QualType T = QualType::ReadVal(D); - ObjCPropertyRefExpr* dr = new ObjCPropertyRefExpr(NULL,T,Loc,0); - D.ReadPtr(dr->AsProperty,false); - return dr; -} - -ObjCKVCRefExpr* ObjCKVCRefExpr::CreateImpl(Deserializer& D, - ASTContext& C) { - SourceLocation Loc = SourceLocation::ReadVal(D); - QualType T = QualType::ReadVal(D); - ObjCKVCRefExpr* dr = new ObjCKVCRefExpr(NULL,T,NULL,Loc,0); - D.ReadPtr(dr->Setter,false); - D.ReadPtr(dr->Getter,false); - return dr; -} - -void ObjCMessageExpr::EmitImpl(Serializer& S) const { - S.EmitInt(getFlag()); - S.Emit(getType()); - S.Emit(SelName); - S.Emit(LBracloc); - S.Emit(RBracloc); - S.EmitInt(NumArgs); - S.EmitPtr(MethodProto); - - if (getReceiver()) - S.BatchEmitOwnedPtrs(NumArgs+1, SubExprs); - else { - ClassInfo Info = getClassInfo(); - - if (Info.first) S.EmitPtr(Info.first); - else S.EmitPtr(Info.second); - - S.BatchEmitOwnedPtrs(NumArgs, &SubExprs[ARGS_START]); - } -} - -ObjCMessageExpr* ObjCMessageExpr::CreateImpl(Deserializer& D, ASTContext& C) { - unsigned flags = D.ReadInt(); - QualType t = QualType::ReadVal(D); - Selector S = Selector::ReadVal(D); - SourceLocation L = SourceLocation::ReadVal(D); - SourceLocation R = SourceLocation::ReadVal(D); - - // Construct an array for the subexpressions. - unsigned NumArgs = D.ReadInt(); - Stmt** SubExprs = new Stmt*[NumArgs+1]; - - // Construct the ObjCMessageExpr object using the special ctor. - ObjCMessageExpr* ME = new ObjCMessageExpr(S, t, L, R, SubExprs, NumArgs); - - // Read in the MethodProto. Read the instance variable directly - // allows it to be backpatched. - D.ReadPtr(ME->MethodProto); - - // Now read in the arguments. - - if ((flags & Flags) == IsInstMeth) - D.BatchReadOwnedPtrs(NumArgs+1, SubExprs, C); - else { - // Read the pointer for Cls/ClassName. The Deserializer will handle the - // bit-mangling automatically. - SubExprs[RECEIVER] = (Stmt*) ((uintptr_t) flags); - D.ReadUIntPtr((uintptr_t&) SubExprs[RECEIVER]); - - // Read the arguments. - D.BatchReadOwnedPtrs(NumArgs, &SubExprs[ARGS_START], C); - } - - return ME; -} - -void ObjCSelectorExpr::EmitImpl(Serializer& S) const { - S.Emit(AtLoc); - S.Emit(RParenLoc); - S.Emit(getType()); - S.Emit(SelName); -} - -ObjCSelectorExpr* ObjCSelectorExpr::CreateImpl(Deserializer& D, ASTContext& C) { - SourceLocation AtLoc = SourceLocation::ReadVal(D); - SourceLocation RParenLoc = SourceLocation::ReadVal(D); - QualType T = QualType::ReadVal(D); - Selector SelName = Selector::ReadVal(D); - - return new ObjCSelectorExpr(T,SelName,AtLoc,RParenLoc); -} - -void ObjCStringLiteral::EmitImpl(Serializer& S) const { - S.Emit(AtLoc); - S.Emit(getType()); - S.EmitOwnedPtr(String); -} - -ObjCStringLiteral* ObjCStringLiteral::CreateImpl(Deserializer& D, ASTContext& C) { - SourceLocation L = SourceLocation::ReadVal(D); - QualType T = QualType::ReadVal(D); - StringLiteral* String = cast(D.ReadOwnedPtr(C)); - return new ObjCStringLiteral(String,T,L); -} - -void ObjCSuperExpr::EmitImpl(llvm::Serializer& S) const { - S.Emit(getType()); - S.Emit(Loc); -} - -ObjCSuperExpr* ObjCSuperExpr::CreateImpl(llvm::Deserializer& D, ASTContext&) { - QualType Ty = QualType::ReadVal(D); - SourceLocation Loc = SourceLocation::ReadVal(D); - return new ObjCSuperExpr(Loc, Ty); -} - -//===----------------------------------------------------------------------===// -// Serialization for Clang Extensions. -//===----------------------------------------------------------------------===// - -void ExtVectorElementExpr::EmitImpl(llvm::Serializer& S) const { - S.Emit(getType()); - S.EmitOwnedPtr(getBase()); - S.EmitPtr(&Accessor); - S.Emit(AccessorLoc); -} - -ExtVectorElementExpr* CreateImpl(llvm::Deserializer& D, ASTContext& C) { - QualType T = QualType::ReadVal(D); - Expr *B = D.ReadOwnedPtr(C); - IdentifierInfo *A = D.ReadPtr(); - SourceLocation AL = SourceLocation::ReadVal(D); - return new (C) ExtVectorElementExpr(T, B, *A, AL); -} - -void BlockExpr::EmitImpl(Serializer& S) const { - S.Emit(getType()); - S.EmitOwnedPtr(TheBlock); - S.EmitBool(HasBlockDeclRefExprs); -} - -BlockExpr* BlockExpr::CreateImpl(Deserializer& D, ASTContext& C) { - QualType T = QualType::ReadVal(D); - BlockDecl *B = cast(D.ReadOwnedPtr(C)); - bool H = D.ReadBool(); - return new BlockExpr(B,T,H); -} - -void BlockDeclRefExpr::EmitImpl(Serializer& S) const { - S.Emit(Loc); - S.Emit(getType()); - S.EmitBool(false); - S.EmitPtr(getDecl()); -} - -BlockDeclRefExpr* BlockDeclRefExpr::CreateImpl(Deserializer& D, ASTContext& C) { - assert(0 && "Cannot deserialize BlockDeclRefExpr yet"); - return 0; -} - -//===----------------------------------------------------------------------===// -// C++ Serialization -//===----------------------------------------------------------------------===// -void CXXDefaultArgExpr::EmitImpl(Serializer& S) const { - S.EmitPtr(Param); -} - -CXXDefaultArgExpr *CXXDefaultArgExpr::CreateImpl(Deserializer& D, ASTContext& C) { - ParmVarDecl* Param = 0; - D.ReadPtr(Param, false); - return new CXXDefaultArgExpr(Param); -} - -void CXXFunctionalCastExpr::EmitImpl(Serializer& S) const { - S.Emit(getType()); - S.Emit(getTypeAsWritten()); - S.Emit(TyBeginLoc); - S.Emit(RParenLoc); - S.EmitOwnedPtr(getSubExpr()); -} - -CXXFunctionalCastExpr * -CXXFunctionalCastExpr::CreateImpl(Deserializer& D, ASTContext& C) { - QualType Ty = QualType::ReadVal(D); - QualType WrittenTy = QualType::ReadVal(D); - SourceLocation TyBeginLoc = SourceLocation::ReadVal(D); - SourceLocation RParenLoc = SourceLocation::ReadVal(D); - Expr* SubExpr = D.ReadOwnedPtr(C); - return new CXXFunctionalCastExpr(Ty, WrittenTy, TyBeginLoc, SubExpr, RParenLoc); -} - -void CXXNamedCastExpr::EmitImpl(Serializer& S) const { - S.Emit(getType()); - S.Emit(getTypeAsWritten()); - S.Emit(Loc); - S.EmitOwnedPtr(getSubExpr()); -} - -CXXNamedCastExpr * -CXXNamedCastExpr::CreateImpl(Deserializer& D, ASTContext& C, StmtClass SC) { - QualType Ty = QualType::ReadVal(D); - QualType WrittenTy = QualType::ReadVal(D); - SourceLocation Loc = SourceLocation::ReadVal(D); - Expr* SubExpr = D.ReadOwnedPtr(C); - switch (SC) { - case CXXStaticCastExprClass: - return new CXXStaticCastExpr(Ty, SubExpr, WrittenTy, Loc); - case CXXDynamicCastExprClass: - return new CXXDynamicCastExpr(Ty, SubExpr, WrittenTy, Loc); - case CXXReinterpretCastExprClass: - return new CXXReinterpretCastExpr(Ty, SubExpr, WrittenTy, Loc); - case CXXConstCastExprClass: - return new CXXConstCastExpr(Ty, SubExpr, WrittenTy, Loc); - default: - assert(false && "Unknown cast type!"); - return 0; - } -} - -void CXXTypeidExpr::EmitImpl(llvm::Serializer& S) const { - S.Emit(getType()); - S.EmitBool(isTypeOperand()); - if (isTypeOperand()) { - S.Emit(getTypeOperand()); - } else { - S.EmitOwnedPtr(getExprOperand()); - } - S.Emit(Range); -} - -CXXTypeidExpr* -CXXTypeidExpr::CreateImpl(llvm::Deserializer& D, ASTContext& C) { - QualType Ty = QualType::ReadVal(D); - bool isTypeOp = D.ReadBool(); - void *Operand; - if (isTypeOp) { - Operand = QualType::ReadVal(D).getAsOpaquePtr(); - } else { - Operand = D.ReadOwnedPtr(C); - } - SourceRange Range = SourceRange::ReadVal(D); - return new CXXTypeidExpr(isTypeOp, Operand, Ty, Range); -} - -void CXXThisExpr::EmitImpl(llvm::Serializer& S) const { - S.Emit(getType()); - S.Emit(Loc); -} - -CXXThisExpr* CXXThisExpr::CreateImpl(llvm::Deserializer& D, ASTContext&) { - QualType Ty = QualType::ReadVal(D); - SourceLocation Loc = SourceLocation::ReadVal(D); - return new CXXThisExpr(Loc, Ty); -} - -void CXXTemporaryObjectExpr::EmitImpl(llvm::Serializer& S) const { - S.Emit(getType()); - S.Emit(TyBeginLoc); - S.Emit(RParenLoc); - S.EmitPtr(cast(Constructor)); - S.EmitInt(NumArgs); - if (NumArgs > 0) - S.BatchEmitOwnedPtrs(NumArgs, Args); -} - -CXXTemporaryObjectExpr * -CXXTemporaryObjectExpr::CreateImpl(llvm::Deserializer& D, ASTContext& C) { - QualType writtenTy = QualType::ReadVal(D); - SourceLocation tyBeginLoc = SourceLocation::ReadVal(D); - SourceLocation rParenLoc = SourceLocation::ReadVal(D); - CXXConstructorDecl * Cons = cast_or_null(D.ReadPtr()); - unsigned NumArgs = D.ReadInt(); - Stmt** Args = 0; - if (NumArgs > 0) { - Args = new Stmt*[NumArgs]; - D.BatchReadOwnedPtrs(NumArgs, Args, C); - } - - CXXTemporaryObjectExpr * Result - = new CXXTemporaryObjectExpr(Cons, writtenTy, tyBeginLoc, - (Expr**)Args, NumArgs, rParenLoc); - - if (NumArgs > 0) - delete [] Args; - - return Result; -} - - -void CXXZeroInitValueExpr::EmitImpl(Serializer& S) const { - S.Emit(getType()); - S.Emit(TyBeginLoc); - S.Emit(RParenLoc); -} - -CXXZeroInitValueExpr * -CXXZeroInitValueExpr::CreateImpl(Deserializer& D, ASTContext& C) { - QualType Ty = QualType::ReadVal(D); - SourceLocation TyBeginLoc = SourceLocation::ReadVal(D); - SourceLocation RParenLoc = SourceLocation::ReadVal(D); - return new CXXZeroInitValueExpr(Ty, TyBeginLoc, RParenLoc); -} - -void CXXNewExpr::EmitImpl(Serializer& S) const { - S.Emit(getType()); - S.EmitBool(GlobalNew); - S.EmitBool(ParenTypeId); - S.EmitBool(Initializer); - S.EmitBool(Array); - S.EmitInt(NumPlacementArgs); - S.EmitInt(NumConstructorArgs); - S.BatchEmitOwnedPtrs(NumPlacementArgs + NumConstructorArgs, SubExprs); - assert((OperatorNew == 0 || S.isRegistered(OperatorNew)) && - (OperatorDelete == 0 || S.isRegistered(OperatorDelete)) && - (Constructor == 0 || S.isRegistered(Constructor)) && - "CXXNewExpr cannot own declarations"); - S.EmitPtr(OperatorNew); - S.EmitPtr(OperatorDelete); - S.EmitPtr(Constructor); - S.Emit(StartLoc); - S.Emit(EndLoc); -} - -CXXNewExpr * -CXXNewExpr::CreateImpl(Deserializer& D, ASTContext& C) { - QualType T = QualType::ReadVal(D); - bool GlobalNew = D.ReadBool(); - bool ParenTypeId = D.ReadBool(); - bool Initializer = D.ReadBool(); - bool Array = D.ReadBool(); - unsigned NumPlacementArgs = D.ReadInt(); - unsigned NumConstructorArgs = D.ReadInt(); - unsigned TotalExprs = Array + NumPlacementArgs + NumConstructorArgs; - Stmt** SubExprs = new Stmt*[TotalExprs]; - D.BatchReadOwnedPtrs(TotalExprs, SubExprs, C); - FunctionDecl *OperatorNew = D.ReadPtr(); - FunctionDecl *OperatorDelete = D.ReadPtr(); - CXXConstructorDecl *Constructor = D.ReadPtr(); - SourceLocation StartLoc = SourceLocation::ReadVal(D); - SourceLocation EndLoc = SourceLocation::ReadVal(D); - - return new CXXNewExpr(T, GlobalNew, ParenTypeId, Initializer, Array, - NumPlacementArgs, NumConstructorArgs, SubExprs, - OperatorNew, OperatorDelete, Constructor, StartLoc, - EndLoc); -} - -void CXXDeleteExpr::EmitImpl(Serializer& S) const { - S.Emit(getType()); - S.EmitBool(GlobalDelete); - S.EmitBool(ArrayForm); - S.EmitPtr(OperatorDelete); - S.EmitOwnedPtr(Argument); - S.Emit(Loc); -} - -CXXDeleteExpr * -CXXDeleteExpr::CreateImpl(Deserializer& D, ASTContext& C) { - QualType Ty = QualType::ReadVal(D); - bool GlobalDelete = D.ReadBool(); - bool ArrayForm = D.ReadBool(); - FunctionDecl *OperatorDelete = D.ReadPtr(); - Stmt *Argument = D.ReadOwnedPtr(C); - SourceLocation Loc = SourceLocation::ReadVal(D); - return new CXXDeleteExpr(Ty, GlobalDelete, ArrayForm, OperatorDelete, - cast(Argument), Loc); -} - -void UnresolvedFunctionNameExpr::EmitImpl(llvm::Serializer& S) const { - S.Emit(getType()); - S.EmitPtr(Name.getAsIdentifierInfo()); // FIXME: WRONG! - S.Emit(Loc); -} - -UnresolvedFunctionNameExpr * -UnresolvedFunctionNameExpr::CreateImpl(llvm::Deserializer& D, ASTContext& C) { - QualType Ty = QualType::ReadVal(D); - IdentifierInfo *N = D.ReadPtr(); - SourceLocation L = SourceLocation::ReadVal(D); - return new UnresolvedFunctionNameExpr(N, Ty, L); -} - -void UnaryTypeTraitExpr::EmitImpl(llvm::Serializer& S) const { - S.EmitInt(UTT); - S.Emit(Loc); - S.Emit(RParen); - S.Emit(QueriedType); - S.Emit(getType()); -} - -UnaryTypeTraitExpr * -UnaryTypeTraitExpr::CreateImpl(llvm::Deserializer& D, ASTContext& C) { - UnaryTypeTrait UTT = static_cast(D.ReadInt()); - SourceLocation Loc = SourceLocation::ReadVal(D); - SourceLocation RParen = SourceLocation::ReadVal(D); - QualType QueriedType = QualType::ReadVal(D); - QualType Ty = QualType::ReadVal(D); - return new UnaryTypeTraitExpr(Loc, UTT, QueriedType, RParen, Ty); -} - -void CXXCatchStmt::EmitImpl(llvm::Serializer& S) const { - S.Emit(CatchLoc); - S.EmitOwnedPtr(ExceptionDecl); - S.EmitOwnedPtr(HandlerBlock); -} - -CXXCatchStmt * -CXXCatchStmt::CreateImpl(llvm::Deserializer& D, ASTContext& C) { - SourceLocation CatchLoc = SourceLocation::ReadVal(D); - Decl *ExDecl = D.ReadOwnedPtr(C); - Stmt *HandlerBlock = D.ReadOwnedPtr(C); - return new CXXCatchStmt(CatchLoc, ExDecl, HandlerBlock); -} - -void CXXTryStmt::EmitImpl(llvm::Serializer& S) const { - S.Emit(TryLoc); - S.EmitInt(Stmts.size()); - S.BatchEmitOwnedPtrs(Stmts.size(), &Stmts[0]); -} - -CXXTryStmt * -CXXTryStmt::CreateImpl(llvm::Deserializer& D, ASTContext& C) { - SourceLocation TryLoc = SourceLocation::ReadVal(D); - unsigned size = D.ReadInt(); - llvm::SmallVector Stmts(size); - D.BatchReadOwnedPtrs(size, &Stmts[0], C); - - return new CXXTryStmt(TryLoc, Stmts[0], &Stmts[1], size - 1); -} - -void QualifiedDeclRefExpr::EmitImpl(llvm::Serializer& S) const { - DeclRefExpr::EmitImpl(S); - S.Emit(QualifierRange); - // FIXME: Serialize nested-name-specifiers -} - -QualifiedDeclRefExpr* -QualifiedDeclRefExpr::CreateImpl(llvm::Deserializer& D, ASTContext& C) { - assert(false && "Cannot deserialize qualified decl references"); - return 0; -} diff --git a/lib/AST/TypeSerialization.cpp b/lib/AST/TypeSerialization.cpp deleted file mode 100644 index 0562416da0..0000000000 --- a/lib/AST/TypeSerialization.cpp +++ /dev/null @@ -1,490 +0,0 @@ -//===--- TypeSerialization.cpp - Serialization of Decls ---------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file defines methods that implement bitcode serialization for Types. -// -//===----------------------------------------------------------------------===// - -#include "clang/AST/Type.h" -#include "clang/AST/Decl.h" -#include "clang/AST/DeclTemplate.h" -#include "clang/AST/Expr.h" -#include "clang/AST/ASTContext.h" -#include "llvm/Bitcode/Serialize.h" -#include "llvm/Bitcode/Deserialize.h" - -using namespace clang; -using llvm::Serializer; -using llvm::Deserializer; -using llvm::SerializedPtrID; - - -void QualType::Emit(Serializer& S) const { - S.EmitPtr(getTypePtr()); - S.EmitInt(getCVRQualifiers()); -} - -QualType QualType::ReadVal(Deserializer& D) { - uintptr_t Val; - D.ReadUIntPtr(Val, false); - return QualType(reinterpret_cast(Val), D.ReadInt()); -} - -void QualType::ReadBackpatch(Deserializer& D) { - uintptr_t Val; - D.ReadUIntPtr(Val, false); - - Value.setPointer(reinterpret_cast(Val)); - Value.setInt(D.ReadInt()); -} - -//===----------------------------------------------------------------------===// -// Type Serialization: Dispatch code to handle specific types. -//===----------------------------------------------------------------------===// - -void Type::Emit(Serializer& S) const { - S.EmitInt(getTypeClass()); - S.EmitPtr(this); - - if (!isa(this)) - EmitImpl(S); -} - -void Type::Create(ASTContext& Context, unsigned i, Deserializer& D) { - Type::TypeClass K = static_cast(D.ReadInt()); - SerializedPtrID PtrID = D.ReadPtrID(); - - switch (K) { - default: - assert (false && "Deserialization for type not supported."); - break; - - case Type::Builtin: - assert (i < Context.getTypes().size()); - assert (isa(Context.getTypes()[i])); - D.RegisterPtr(PtrID,Context.getTypes()[i]); - break; - - case Type::ExtQual: - D.RegisterPtr(PtrID,ExtQualType::CreateImpl(Context,D)); - break; - - case Type::Complex: - D.RegisterPtr(PtrID,ComplexType::CreateImpl(Context,D)); - break; - - case Type::ConstantArray: - D.RegisterPtr(PtrID,ConstantArrayType::CreateImpl(Context,D)); - break; - - case Type::FunctionNoProto: - D.RegisterPtr(PtrID,FunctionNoProtoType::CreateImpl(Context,D)); - break; - - case Type::FunctionProto: - D.RegisterPtr(PtrID,FunctionProtoType::CreateImpl(Context,D)); - break; - - case Type::IncompleteArray: - D.RegisterPtr(PtrID,IncompleteArrayType::CreateImpl(Context,D)); - break; - - case Type::MemberPointer: - D.RegisterPtr(PtrID, MemberPointerType::CreateImpl(Context, D)); - break; - - case Type::Pointer: - D.RegisterPtr(PtrID, PointerType::CreateImpl(Context, D)); - break; - - case Type::BlockPointer: - D.RegisterPtr(PtrID, BlockPointerType::CreateImpl(Context, D)); - break; - - case Type::LValueReference: - D.RegisterPtr(PtrID, LValueReferenceType::CreateImpl(Context, D)); - break; - - case Type::RValueReference: - D.RegisterPtr(PtrID, RValueReferenceType::CreateImpl(Context, D)); - break; - - case Type::Record: - case Type::Enum: - // FIXME: Implement this! - assert(false && "Can't deserialize tag types!"); - break; - - case Type::Typedef: - D.RegisterPtr(PtrID, TypedefType::CreateImpl(Context, D)); - break; - - case Type::TypeOfExpr: - D.RegisterPtr(PtrID, TypeOfExprType::CreateImpl(Context, D)); - break; - - case Type::TypeOf: - D.RegisterPtr(PtrID, TypeOfType::CreateImpl(Context, D)); - break; - - case Type::TemplateTypeParm: - D.RegisterPtr(PtrID, TemplateTypeParmType::CreateImpl(Context, D)); - break; - - case Type::VariableArray: - D.RegisterPtr(PtrID, VariableArrayType::CreateImpl(Context, D)); - break; - } -} - -//===----------------------------------------------------------------------===// -// ExtQualType -//===----------------------------------------------------------------------===// - -void ExtQualType::EmitImpl(Serializer& S) const { - S.EmitPtr(getBaseType()); - S.EmitInt(getAddressSpace()); -} - -Type* ExtQualType::CreateImpl(ASTContext& Context, Deserializer& D) { - QualType BaseTy = QualType::ReadVal(D); - unsigned AddressSpace = D.ReadInt(); - return Context.getAddrSpaceQualType(BaseTy, AddressSpace).getTypePtr(); -} - -//===----------------------------------------------------------------------===// -// BlockPointerType -//===----------------------------------------------------------------------===// - -void BlockPointerType::EmitImpl(Serializer& S) const { - S.Emit(getPointeeType()); -} - -Type* BlockPointerType::CreateImpl(ASTContext& Context, Deserializer& D) { - return Context.getBlockPointerType(QualType::ReadVal(D)).getTypePtr(); -} - -//===----------------------------------------------------------------------===// -// ComplexType -//===----------------------------------------------------------------------===// - -void ComplexType::EmitImpl(Serializer& S) const { - S.Emit(getElementType()); -} - -Type* ComplexType::CreateImpl(ASTContext& Context, Deserializer& D) { - return Context.getComplexType(QualType::ReadVal(D)).getTypePtr(); -} - -//===----------------------------------------------------------------------===// -// ConstantArray -//===----------------------------------------------------------------------===// - -void ConstantArrayType::EmitImpl(Serializer& S) const { - S.Emit(getElementType()); - S.EmitInt(getSizeModifier()); - S.EmitInt(getIndexTypeQualifier()); - S.Emit(Size); -} - -Type* ConstantArrayType::CreateImpl(ASTContext& Context, Deserializer& D) { - QualType ElTy = QualType::ReadVal(D); - ArraySizeModifier am = static_cast(D.ReadInt()); - unsigned ITQ = D.ReadInt(); - - llvm::APInt Size; - D.Read(Size); - - return Context.getConstantArrayType(ElTy,Size,am,ITQ).getTypePtr(); -} - -//===----------------------------------------------------------------------===// -// FunctionNoProtoType -//===----------------------------------------------------------------------===// - -void FunctionNoProtoType::EmitImpl(Serializer& S) const { - S.Emit(getResultType()); -} - -Type* FunctionNoProtoType::CreateImpl(ASTContext& Context, Deserializer& D) { - return Context.getFunctionNoProtoType(QualType::ReadVal(D)).getTypePtr(); -} - -//===----------------------------------------------------------------------===// -// FunctionProtoType -//===----------------------------------------------------------------------===// - -void FunctionProtoType::EmitImpl(Serializer& S) const { - S.Emit(getResultType()); - S.EmitBool(isVariadic()); - S.EmitInt(getTypeQuals()); - S.EmitInt(getNumArgs()); - - for (arg_type_iterator I=arg_type_begin(), E=arg_type_end(); I!=E; ++I) - S.Emit(*I); -} - -Type* FunctionProtoType::CreateImpl(ASTContext& Context, Deserializer& D) { - QualType ResultType = QualType::ReadVal(D); - bool isVariadic = D.ReadBool(); - unsigned TypeQuals = D.ReadInt(); - unsigned NumArgs = D.ReadInt(); - - llvm::SmallVector Args; - - for (unsigned j = 0; j < NumArgs; ++j) - Args.push_back(QualType::ReadVal(D)); - - return Context.getFunctionType(ResultType,&*Args.begin(), - NumArgs,isVariadic,TypeQuals).getTypePtr(); -} - -//===----------------------------------------------------------------------===// -// PointerType -//===----------------------------------------------------------------------===// - -void PointerType::EmitImpl(Serializer& S) const { - S.Emit(getPointeeType()); -} - -Type* PointerType::CreateImpl(ASTContext& Context, Deserializer& D) { - return Context.getPointerType(QualType::ReadVal(D)).getTypePtr(); -} - -//===----------------------------------------------------------------------===// -// ReferenceType -//===----------------------------------------------------------------------===// - -void ReferenceType::EmitImpl(Serializer& S) const { - S.Emit(getPointeeType()); -} - -Type* LValueReferenceType::CreateImpl(ASTContext& Context, Deserializer& D) { - return Context.getLValueReferenceType(QualType::ReadVal(D)).getTypePtr(); -} - -Type* RValueReferenceType::CreateImpl(ASTContext& Context, Deserializer& D) { - return Context.getRValueReferenceType(QualType::ReadVal(D)).getTypePtr(); -} - -//===----------------------------------------------------------------------===// -// MemberPointerType -//===----------------------------------------------------------------------===// - -void MemberPointerType::EmitImpl(Serializer& S) const { - S.Emit(getPointeeType()); - S.Emit(QualType(Class, 0)); -} - -Type* MemberPointerType::CreateImpl(ASTContext& Context, Deserializer& D) { - QualType Pointee = QualType::ReadVal(D); - QualType Class = QualType::ReadVal(D); - return Context.getMemberPointerType(Pointee, Class.getTypePtr()).getTypePtr(); -} - -//===----------------------------------------------------------------------===// -// TagType -//===----------------------------------------------------------------------===// - -void TagType::EmitImpl(Serializer& S) const { - S.EmitOwnedPtr(getDecl()); -} - -Type* TagType::CreateImpl(ASTContext& Context, Deserializer& D) { - std::vector& Types = - const_cast&>(Context.getTypes()); - - // FIXME: This is wrong: we need the subclasses to do the - // (de-)serialization. - TagType* T = new TagType(Record, NULL,QualType()); - Types.push_back(T); - - // Deserialize the decl. - T->decl.setPointer(cast(D.ReadOwnedPtr(Context))); - T->decl.setInt(0); - - return T; -} - -//===----------------------------------------------------------------------===// -// TypedefType -//===----------------------------------------------------------------------===// - -void TypedefType::EmitImpl(Serializer& S) const { - S.Emit(getCanonicalTypeInternal()); - S.EmitPtr(Decl); -} - -Type* TypedefType::CreateImpl(ASTContext& Context, Deserializer& D) { - std::vector& Types = - const_cast&>(Context.getTypes()); - - TypedefType* T = new TypedefType(Type::Typedef, NULL, QualType::ReadVal(D)); - Types.push_back(T); - - D.ReadPtr(T->Decl); // May be backpatched. - return T; -} - -//===----------------------------------------------------------------------===// -// TypeOfExprType -//===----------------------------------------------------------------------===// - -void TypeOfExprType::EmitImpl(llvm::Serializer& S) const { - S.EmitOwnedPtr(TOExpr); -} - -Type* TypeOfExprType::CreateImpl(ASTContext& Context, Deserializer& D) { - Expr* E = D.ReadOwnedPtr(Context); - - std::vector& Types = - const_cast&>(Context.getTypes()); - - TypeOfExprType* T - = new TypeOfExprType(E, Context.getCanonicalType(E->getType())); - Types.push_back(T); - - return T; -} - -//===----------------------------------------------------------------------===// -// TypeOfType -//===----------------------------------------------------------------------===// - -void TypeOfType::EmitImpl(llvm::Serializer& S) const { - S.Emit(TOType); -} - -Type* TypeOfType::CreateImpl(ASTContext& Context, Deserializer& D) { - QualType TOType = QualType::ReadVal(D); - - std::vector& Types = - const_cast&>(Context.getTypes()); - - TypeOfType* T = new TypeOfType(TOType, Context.getCanonicalType(TOType)); - Types.push_back(T); - - return T; -} - -//===----------------------------------------------------------------------===// -// TemplateTypeParmType -//===----------------------------------------------------------------------===// - -void TemplateTypeParmType::EmitImpl(Serializer& S) const { - S.EmitInt(Depth); - S.EmitInt(Index); - S.EmitPtr(Name); -} - -Type* TemplateTypeParmType::CreateImpl(ASTContext& Context, Deserializer& D) { - unsigned Depth = D.ReadInt(); - unsigned Index = D.ReadInt(); - IdentifierInfo *Name = D.ReadPtr(); - return Context.getTemplateTypeParmType(Depth, Index, Name).getTypePtr(); -} - -//===----------------------------------------------------------------------===// -// TemplateSpecializationType -//===----------------------------------------------------------------------===// - -void TemplateSpecializationType::EmitImpl(Serializer& S) const { - // FIXME: Serialization support -} - -Type* -TemplateSpecializationType:: -CreateImpl(ASTContext& Context, Deserializer& D) { - // FIXME: Deserialization support - return 0; -} - -//===----------------------------------------------------------------------===// -// QualifiedNameType -//===----------------------------------------------------------------------===// -void QualifiedNameType::EmitImpl(llvm::Serializer& S) const { - // FIXME: Serialize the actual components -} - -Type* -QualifiedNameType::CreateImpl(ASTContext& Context, llvm::Deserializer& D) { - // FIXME: Implement de-serialization - return 0; -} - -//===----------------------------------------------------------------------===// -// TypenameType -//===----------------------------------------------------------------------===// -void TypenameType::EmitImpl(llvm::Serializer& S) const { - // FIXME: Serialize the actual components -} - -Type* -TypenameType::CreateImpl(ASTContext& Context, llvm::Deserializer& D) { - // FIXME: Implement de-serialization - return 0; -} - -//===----------------------------------------------------------------------===// -// VariableArrayType -//===----------------------------------------------------------------------===// - -void VariableArrayType::EmitImpl(Serializer& S) const { - S.Emit(getElementType()); - S.EmitInt(getSizeModifier()); - S.EmitInt(getIndexTypeQualifier()); - S.EmitOwnedPtr(SizeExpr); -} - -Type* VariableArrayType::CreateImpl(ASTContext& Context, Deserializer& D) { - QualType ElTy = QualType::ReadVal(D); - ArraySizeModifier am = static_cast(D.ReadInt()); - unsigned ITQ = D.ReadInt(); - Expr* SizeExpr = D.ReadOwnedPtr(Context); - - return Context.getVariableArrayType(ElTy,SizeExpr,am,ITQ).getTypePtr(); -} - -//===----------------------------------------------------------------------===// -// DependentSizedArrayType -//===----------------------------------------------------------------------===// - -void DependentSizedArrayType::EmitImpl(Serializer& S) const { - S.Emit(getElementType()); - S.EmitInt(getSizeModifier()); - S.EmitInt(getIndexTypeQualifier()); - S.EmitOwnedPtr(SizeExpr); -} - -Type* DependentSizedArrayType::CreateImpl(ASTContext& Context, Deserializer& D) { - QualType ElTy = QualType::ReadVal(D); - ArraySizeModifier am = static_cast(D.ReadInt()); - unsigned ITQ = D.ReadInt(); - Expr* SizeExpr = D.ReadOwnedPtr(Context); - - return Context.getDependentSizedArrayType(ElTy,SizeExpr,am,ITQ).getTypePtr(); -} - -//===----------------------------------------------------------------------===// -// IncompleteArrayType -//===----------------------------------------------------------------------===// - -void IncompleteArrayType::EmitImpl(Serializer& S) const { - S.Emit(getElementType()); - S.EmitInt(getSizeModifier()); - S.EmitInt(getIndexTypeQualifier()); -} - -Type* IncompleteArrayType::CreateImpl(ASTContext& Context, Deserializer& D) { - QualType ElTy = QualType::ReadVal(D); - ArraySizeModifier am = static_cast(D.ReadInt()); - unsigned ITQ = D.ReadInt(); - - return Context.getIncompleteArrayType(ElTy,am,ITQ).getTypePtr(); -} diff --git a/lib/Basic/CMakeLists.txt b/lib/Basic/CMakeLists.txt index a3731cb494..1cbf11c2bf 100644 --- a/lib/Basic/CMakeLists.txt +++ b/lib/Basic/CMakeLists.txt @@ -5,7 +5,6 @@ add_clang_library(clangBasic Diagnostic.cpp FileManager.cpp IdentifierTable.cpp - LangOptions.cpp SourceLocation.cpp SourceManager.cpp TargetInfo.cpp diff --git a/lib/Basic/FileManager.cpp b/lib/Basic/FileManager.cpp index 773d366675..2cd140d95e 100644 --- a/lib/Basic/FileManager.cpp +++ b/lib/Basic/FileManager.cpp @@ -19,8 +19,6 @@ #include "clang/Basic/FileManager.h" #include "llvm/ADT/SmallString.h" -#include "llvm/Bitcode/Serialize.h" -#include "llvm/Bitcode/Deserialize.h" #include "llvm/Support/Streams.h" #include "llvm/Config/config.h" using namespace clang; diff --git a/lib/Basic/IdentifierTable.cpp b/lib/Basic/IdentifierTable.cpp index 78758d7188..344c4eb18d 100644 --- a/lib/Basic/IdentifierTable.cpp +++ b/lib/Basic/IdentifierTable.cpp @@ -16,8 +16,6 @@ #include "clang/Basic/LangOptions.h" #include "llvm/ADT/FoldingSet.h" #include "llvm/ADT/DenseMap.h" -#include "llvm/Bitcode/Serialize.h" -#include "llvm/Bitcode/Deserialize.h" #include using namespace clang; @@ -54,10 +52,6 @@ IdentifierTable::IdentifierTable(const LangOptions &LangOpts, AddKeywords(LangOpts); } -// This cstor is intended to be used only for serialization. -IdentifierTable::IdentifierTable() - : HashTable(8192), ExternalLookup(0) { } - //===----------------------------------------------------------------------===// // Language Keyword Implementation //===----------------------------------------------------------------------===// @@ -264,7 +258,6 @@ namespace clang { /// this class is provided strictly through Selector. class MultiKeywordSelector : public DeclarationNameExtra, public llvm::FoldingSetNode { - friend SelectorTable* SelectorTable::CreateAndRegister(llvm::Deserializer&); MultiKeywordSelector(unsigned nKeys) { ExtraKindOrNumArgs = NUM_EXTRA_KINDS + nKeys; } @@ -414,155 +407,3 @@ SelectorTable::~SelectorTable() { delete &getSelectorTableImpl(Impl); } -//===----------------------------------------------------------------------===// -// Serialization for IdentifierInfo and IdentifierTable. -//===----------------------------------------------------------------------===// - -void IdentifierInfo::Emit(llvm::Serializer& S) const { - S.EmitInt(getTokenID()); - S.EmitInt(getBuiltinID()); - S.EmitInt(getObjCKeywordID()); - S.EmitBool(hasMacroDefinition()); - S.EmitBool(isExtensionToken()); - S.EmitBool(isPoisoned()); - S.EmitBool(isCPlusPlusOperatorKeyword()); - // FIXME: FETokenInfo -} - -void IdentifierInfo::Read(llvm::Deserializer& D) { - setTokenID((tok::TokenKind) D.ReadInt()); - setBuiltinID(D.ReadInt()); - setObjCKeywordID((tok::ObjCKeywordKind) D.ReadInt()); - setHasMacroDefinition(D.ReadBool()); - setIsExtensionToken(D.ReadBool()); - setIsPoisoned(D.ReadBool()); - setIsCPlusPlusOperatorKeyword(D.ReadBool()); - // FIXME: FETokenInfo -} - -void IdentifierTable::Emit(llvm::Serializer& S) const { - S.EnterBlock(); - - S.EmitPtr(this); - - for (iterator I=begin(), E=end(); I != E; ++I) { - const char* Key = I->getKeyData(); - const IdentifierInfo* Info = I->getValue(); - - bool KeyRegistered = S.isRegistered(Key); - bool InfoRegistered = S.isRegistered(Info); - - if (KeyRegistered || InfoRegistered) { - // These acrobatics are so that we don't incur the cost of registering - // a pointer with the backpatcher during deserialization if nobody - // references the object. - S.EmitPtr(InfoRegistered ? Info : NULL); - S.EmitPtr(KeyRegistered ? Key : NULL); - S.EmitCStr(Key); - S.Emit(*Info); - } - } - - S.ExitBlock(); -} - -IdentifierTable* IdentifierTable::CreateAndRegister(llvm::Deserializer& D) { - llvm::Deserializer::Location BLoc = D.getCurrentBlockLocation(); - - std::vector buff; - buff.reserve(200); - - IdentifierTable* t = new IdentifierTable(); - D.RegisterPtr(t); - - while (!D.FinishedBlock(BLoc)) { - llvm::SerializedPtrID InfoPtrID = D.ReadPtrID(); - llvm::SerializedPtrID KeyPtrID = D.ReadPtrID(); - - D.ReadCStr(buff); - IdentifierInfo *II = &t->get(&buff[0], &buff[0] + buff.size()); - II->Read(D); - - if (InfoPtrID) D.RegisterPtr(InfoPtrID, II); - if (KeyPtrID) D.RegisterPtr(KeyPtrID, II->getName()); - } - - return t; -} - -//===----------------------------------------------------------------------===// -// Serialization for Selector and SelectorTable. -//===----------------------------------------------------------------------===// - -void Selector::Emit(llvm::Serializer& S) const { - S.EmitInt(getIdentifierInfoFlag()); - S.EmitPtr(reinterpret_cast(InfoPtr & ~ArgFlags)); -} - -Selector Selector::ReadVal(llvm::Deserializer& D) { - unsigned flag = D.ReadInt(); - - uintptr_t ptr; - D.ReadUIntPtr(ptr,false); // No backpatching. - - return Selector(ptr | flag); -} - -void SelectorTable::Emit(llvm::Serializer& S) const { - typedef llvm::FoldingSet::iterator iterator; - llvm::FoldingSet *SelTab; - SelTab = static_cast *>(Impl); - - S.EnterBlock(); - - S.EmitPtr(this); - - for (iterator I=SelTab->begin(), E=SelTab->end(); I != E; ++I) { - if (!S.isRegistered(&*I)) - continue; - - S.FlushRecord(); // Start a new record. - - S.EmitPtr(&*I); - S.EmitInt(I->getNumArgs()); - - for (MultiKeywordSelector::keyword_iterator KI = I->keyword_begin(), - KE = I->keyword_end(); KI != KE; ++KI) - S.EmitPtr(*KI); - } - - S.ExitBlock(); -} - -SelectorTable* SelectorTable::CreateAndRegister(llvm::Deserializer& D) { - llvm::Deserializer::Location BLoc = D.getCurrentBlockLocation(); - - SelectorTable* t = new SelectorTable(); - D.RegisterPtr(t); - - llvm::FoldingSet& SelTab = - *static_cast*>(t->Impl); - - while (!D.FinishedBlock(BLoc)) { - - llvm::SerializedPtrID PtrID = D.ReadPtrID(); - unsigned nKeys = D.ReadInt(); - - MultiKeywordSelector *SI = - (MultiKeywordSelector*)malloc(sizeof(MultiKeywordSelector) + - nKeys*sizeof(IdentifierInfo *)); - - new (SI) MultiKeywordSelector(nKeys); - - D.RegisterPtr(PtrID,SI); - - IdentifierInfo **KeyInfo = reinterpret_cast(SI+1); - - for (unsigned i = 0; i != nKeys; ++i) - D.ReadPtr(KeyInfo[i],false); - - SelTab.GetOrInsertNode(SI); - } - - return t; -} diff --git a/lib/Basic/LangOptions.cpp b/lib/Basic/LangOptions.cpp deleted file mode 100644 index 6119afc790..0000000000 --- a/lib/Basic/LangOptions.cpp +++ /dev/null @@ -1,60 +0,0 @@ -//===--- LangOptions.cpp - Language feature info --------------------------===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file implements the methods for LangOptions. -// -//===----------------------------------------------------------------------===// - -#include "clang/Basic/LangOptions.h" -#include "llvm/Bitcode/Serialize.h" -#include "llvm/Bitcode/Deserialize.h" - -using namespace clang; - -void LangOptions::Emit(llvm::Serializer& S) const { - S.EmitBool((bool) Trigraphs); - S.EmitBool((bool) BCPLComment); - S.EmitBool((bool) DollarIdents); - S.EmitBool((bool) Digraphs); - S.EmitBool((bool) HexFloats); - S.EmitBool((bool) C99); - S.EmitBool((bool) Microsoft); - S.EmitBool((bool) CPlusPlus); - S.EmitBool((bool) CPlusPlus0x); - S.EmitBool((bool) NoExtensions); - S.EmitBool((bool) CXXOperatorNames); - S.EmitBool((bool) ObjC1); - S.EmitBool((bool) ObjC2); - S.EmitBool((unsigned) GC); - S.EmitBool((bool) PascalStrings); - S.EmitBool((bool) Boolean); - S.EmitBool((bool) WritableStrings); - S.EmitBool((bool) LaxVectorConversions); -} - -void LangOptions::Read(llvm::Deserializer& D) { - Trigraphs = D.ReadBool() ? 1 : 0; - BCPLComment = D.ReadBool() ? 1 : 0; - DollarIdents = D.ReadBool() ? 1 : 0; - Digraphs = D.ReadBool() ? 1 : 0; - HexFloats = D.ReadBool() ? 1 : 0; - C99 = D.ReadBool() ? 1 : 0; - Microsoft = D.ReadBool() ? 1 : 0; - CPlusPlus = D.ReadBool() ? 1 : 0; - CPlusPlus0x = D.ReadBool() ? 1 : 0; - NoExtensions = D.ReadBool() ? 1 : 0; - CXXOperatorNames = D.ReadBool() ? 1 : 0; - ObjC1 = D.ReadBool() ? 1 : 0; - ObjC2 = D.ReadBool() ? 1 : 0; - GC = D.ReadInt(); - PascalStrings = D.ReadBool() ? 1 : 0; - Boolean = D.ReadBool() ? 1 : 0; - WritableStrings = D.ReadBool() ? 1 : 0; - LaxVectorConversions = D.ReadBool() ? 1 : 0; -} diff --git a/lib/Basic/SourceLocation.cpp b/lib/Basic/SourceLocation.cpp index 82e24d00a2..f21ec8b1e9 100644 --- a/lib/Basic/SourceLocation.cpp +++ b/lib/Basic/SourceLocation.cpp @@ -7,7 +7,6 @@ // //===----------------------------------------------------------------------===// // -// This file defines serialization methods for the SourceLocation class. // This file defines accessor methods for the FullSourceLoc class. // //===----------------------------------------------------------------------===// @@ -15,8 +14,6 @@ #include "clang/Basic/SourceLocation.h" #include "clang/Basic/PrettyStackTrace.h" #include "clang/Basic/SourceManager.h" -#include "llvm/Bitcode/Serialize.h" -#include "llvm/Bitcode/Deserialize.h" #include "llvm/Support/MemoryBuffer.h" #include "llvm/Support/raw_ostream.h" #include @@ -38,14 +35,6 @@ void PrettyStackTraceLoc::print(llvm::raw_ostream &OS) const { // SourceLocation //===----------------------------------------------------------------------===// -void SourceLocation::Emit(llvm::Serializer& S) const { - S.EmitInt(getRawEncoding()); -} - -SourceLocation SourceLocation::ReadVal(llvm::Deserializer& D) { - return SourceLocation::getFromRawEncoding(D.ReadInt()); -} - void SourceLocation::print(llvm::raw_ostream &OS, const SourceManager &SM)const{ if (!isValid()) { OS << ""; @@ -71,17 +60,6 @@ void SourceLocation::dump(const SourceManager &SM) const { print(llvm::errs(), SM); } -void SourceRange::Emit(llvm::Serializer& S) const { - B.Emit(S); - E.Emit(S); -} - -SourceRange SourceRange::ReadVal(llvm::Deserializer& D) { - SourceLocation A = SourceLocation::ReadVal(D); - SourceLocation B = SourceLocation::ReadVal(D); - return SourceRange(A,B); -} - //===----------------------------------------------------------------------===// // FullSourceLoc //===----------------------------------------------------------------------===// diff --git a/lib/Basic/SourceManager.cpp b/lib/Basic/SourceManager.cpp index ed541bfc6b..9ed2163525 100644 --- a/lib/Basic/SourceManager.cpp +++ b/lib/Basic/SourceManager.cpp @@ -17,10 +17,9 @@ #include "llvm/Support/Compiler.h" #include "llvm/Support/MemoryBuffer.h" #include "llvm/System/Path.h" -#include "llvm/Bitcode/Serialize.h" -#include "llvm/Bitcode/Deserialize.h" #include "llvm/Support/Streams.h" #include +#include using namespace clang; using namespace SrcMgr; using llvm::MemoryBuffer; @@ -866,134 +865,3 @@ void SourceManager::PrintStats() const { llvm::cerr << "FileID scans: " << NumLinearScans << " linear, " << NumBinaryProbes << " binary.\n"; } - -//===----------------------------------------------------------------------===// -// Serialization. -//===----------------------------------------------------------------------===// - -void ContentCache::Emit(llvm::Serializer& S) const { - S.FlushRecord(); - S.EmitPtr(this); - - if (Entry) { - llvm::sys::Path Fname(Buffer->getBufferIdentifier()); - - if (Fname.isAbsolute()) - S.EmitCStr(Fname.c_str()); - else { - // Create an absolute path. - // FIXME: This will potentially contain ".." and "." in the path. - llvm::sys::Path path = llvm::sys::Path::GetCurrentDirectory(); - path.appendComponent(Fname.c_str()); - S.EmitCStr(path.c_str()); - } - } - else { - const char* p = Buffer->getBufferStart(); - const char* e = Buffer->getBufferEnd(); - - S.EmitInt(e-p); - - for ( ; p != e; ++p) - S.EmitInt(*p); - } - - S.FlushRecord(); -} - -void ContentCache::ReadToSourceManager(llvm::Deserializer& D, - SourceManager& SMgr, - FileManager* FMgr, - std::vector& Buf) { - if (FMgr) { - llvm::SerializedPtrID PtrID = D.ReadPtrID(); - D.ReadCStr(Buf,false); - - // Create/fetch the FileEntry. - const char* start = &Buf[0]; - const FileEntry* E = FMgr->getFile(start,start+Buf.size()); - - // FIXME: Ideally we want a lazy materialization of the ContentCache - // anyway, because we don't want to read in source files unless this - // is absolutely needed. - if (!E) - D.RegisterPtr(PtrID,NULL); - else - // Get the ContextCache object and register it with the deserializer. - D.RegisterPtr(PtrID, SMgr.getOrCreateContentCache(E)); - return; - } - - // Register the ContextCache object with the deserializer. - /* FIXME: - ContentCache *Entry - SMgr.MemBufferInfos.push_back(ContentCache()); - = const_cast(SMgr.MemBufferInfos.back()); - D.RegisterPtr(&Entry); - - // Create the buffer. - unsigned Size = D.ReadInt(); - Entry.Buffer = MemoryBuffer::getNewUninitMemBuffer(Size); - - // Read the contents of the buffer. - char* p = const_cast(Entry.Buffer->getBufferStart()); - for (unsigned i = 0; i < Size ; ++i) - p[i] = D.ReadInt(); - */ -} - -void SourceManager::Emit(llvm::Serializer& S) const { - S.EnterBlock(); - S.EmitPtr(this); - S.EmitInt(MainFileID.getOpaqueValue()); - - // Emit: FileInfos. Just emit the file name. - S.EnterBlock(); - - // FIXME: Emit FileInfos. - //std::for_each(FileInfos.begin(), FileInfos.end(), - // S.MakeEmitter()); - - S.ExitBlock(); - - // Emit: MemBufferInfos - S.EnterBlock(); - - /* FIXME: EMIT. - std::for_each(MemBufferInfos.begin(), MemBufferInfos.end(), - S.MakeEmitter()); - */ - - S.ExitBlock(); - - // FIXME: Emit SLocEntryTable. - - S.ExitBlock(); -} - -SourceManager* -SourceManager::CreateAndRegister(llvm::Deserializer &D, FileManager &FMgr) { - SourceManager *M = new SourceManager(); - D.RegisterPtr(M); - - // Read: the FileID of the main source file of the translation unit. - M->MainFileID = FileID::get(D.ReadInt()); - - std::vector Buf; - - /*{ // FIXME Read: FileInfos. - llvm::Deserializer::Location BLoc = D.getCurrentBlockLocation(); - while (!D.FinishedBlock(BLoc)) - ContentCache::ReadToSourceManager(D,*M,&FMgr,Buf); - }*/ - - /*{ // FIXME Read: MemBufferInfos. - llvm::Deserializer::Location BLoc = D.getCurrentBlockLocation(); - while (!D.FinishedBlock(BLoc)) - ContentCache::ReadToSourceManager(D,*M,NULL,Buf); - }*/ - - // FIXME: Read SLocEntryTable. - - return M; -} diff --git a/tools/clang-cc/ASTConsumers.cpp b/tools/clang-cc/ASTConsumers.cpp index 52aafd35c0..b0f06fad24 100644 --- a/tools/clang-cc/ASTConsumers.cpp +++ b/tools/clang-cc/ASTConsumers.cpp @@ -1000,144 +1000,3 @@ public: ASTConsumer *clang::CreateInheritanceViewer(const std::string& clsname) { return new InheritanceViewer(clsname); } - -//===----------------------------------------------------------------------===// -// AST Serializer - -namespace { - -class ASTSerializer : public ASTConsumer { -protected: - Diagnostic& Diags; - -public: - ASTSerializer(Diagnostic& diags) : Diags(diags) {} -}; - -class SingleFileSerializer : public ASTSerializer { - const llvm::sys::Path FName; -public: - SingleFileSerializer(const llvm::sys::Path& F, Diagnostic& diags) - : ASTSerializer(diags), FName(F) {} - - virtual void HandleTranslationUnit(ASTContext &Ctx) { - if (Diags.hasErrorOccurred()) - return; - - // Reserve 256K for bitstream buffer. - std::vector Buffer; - Buffer.reserve(256*1024); - - Ctx.EmitASTBitcodeBuffer(Buffer); - - // Write the bits to disk. - if (FILE* fp = fopen(FName.c_str(),"wb")) { - fwrite((char*)&Buffer.front(), sizeof(char), Buffer.size(), fp); - fclose(fp); - } - } -}; - -class BuildSerializer : public ASTSerializer { - llvm::sys::Path EmitDir; -public: - BuildSerializer(const llvm::sys::Path& dir, Diagnostic& diags) - : ASTSerializer(diags), EmitDir(dir) {} - - virtual void HandleTranslationUnit(ASTContext &Ctx); -}; -} // end anonymous namespace - - -void BuildSerializer::HandleTranslationUnit(ASTContext &Ctx) { - if (Diags.hasErrorOccurred()) - return; - - SourceManager& SourceMgr = Ctx.getSourceManager(); - FileID ID = SourceMgr.getMainFileID(); - assert(!ID.isInvalid() && "MainFileID not set!"); - const FileEntry* FE = SourceMgr.getFileEntryForID(ID); - assert(FE && "No FileEntry for main file."); - - // FIXME: This is not portable to Windows. - // FIXME: This logic should probably be moved elsewhere later. - - llvm::sys::Path FName(EmitDir); - - std::vector buf; - buf.reserve(strlen(FE->getName())+100); - - sprintf(&buf[0], "dev_%llx", (unsigned long long) FE->getDevice()); - FName.appendComponent(&buf[0]); - FName.createDirectoryOnDisk(true); - if (!FName.canWrite() || !FName.isDirectory()) { - assert (false && "Could not create 'device' serialization directory."); - return; - } - - sprintf(&buf[0], "%s-%llX.ast", FE->getName(), - (unsigned long long) FE->getInode()); - FName.appendComponent(&buf[0]); - - - // Reserve 256K for bitstream buffer. - std::vector Buffer; - Buffer.reserve(256*1024); - - Ctx.EmitASTBitcodeBuffer(Buffer); - - // Write the bits to disk. - if (FILE* fp = fopen(FName.c_str(),"wb")) { - fwrite((char*)&Buffer.front(), sizeof(char), Buffer.size(), fp); - fclose(fp); - } - - // Now emit the sources. - -} - - -ASTConsumer* clang::CreateASTSerializer(const std::string& InFile, - const std::string& OutputFile, - Diagnostic &Diags) { - - if (OutputFile.size()) { - if (InFile == "-") { - llvm::cerr << - "error: Cannot use --serialize with -o for source read from STDIN.\n"; - return NULL; - } - - // The user specified an AST-emission directory. Determine if the path - // is absolute. - llvm::sys::Path EmitDir(OutputFile); - - if (!EmitDir.isAbsolute()) { - llvm::cerr << - "error: Output directory for --serialize must be an absolute path.\n"; - - return NULL; - } - - // Create the directory if it does not exist. - EmitDir.createDirectoryOnDisk(true); - if (!EmitDir.canWrite() || !EmitDir.isDirectory()) { - llvm::cerr << - "error: Could not create output directory for --serialize.\n"; - - return NULL; - } - - // FIXME: We should probably only allow using BuildSerializer when - // the ASTs come from parsed source files, and not from .ast files. - return new BuildSerializer(EmitDir, Diags); - } - - // The user did not specify an output directory for serialized ASTs. - // Serialize the translation to a single file whose name is the same - // as the input file with the ".ast" extension appended. - - llvm::sys::Path FName(InFile.c_str()); - FName.appendSuffix("ast"); - return new SingleFileSerializer(FName, Diags); -} diff --git a/tools/clang-cc/ASTConsumers.h b/tools/clang-cc/ASTConsumers.h index 7c37266e46..13fd4f4ed8 100644 --- a/tools/clang-cc/ASTConsumers.h +++ b/tools/clang-cc/ASTConsumers.h @@ -61,13 +61,6 @@ ASTConsumer *CreateBackendConsumer(BackendAction Action, ASTConsumer* CreateHTMLPrinter(const std::string &OutFile, Diagnostic &D, Preprocessor *PP, PreprocessorFactory *PPF); -ASTConsumer *CreateSerializationTest(Diagnostic &Diags, - FileManager &FMgr); - -ASTConsumer *CreateASTSerializer(const std::string &InFile, - const std::string &EmitDir, - Diagnostic &Diags); - ASTConsumer *CreatePCHGenerator(const Preprocessor &PP, const std::string &OutFile); diff --git a/tools/clang-cc/CMakeLists.txt b/tools/clang-cc/CMakeLists.txt index 6485e221c0..4ebebb74f5 100644 --- a/tools/clang-cc/CMakeLists.txt +++ b/tools/clang-cc/CMakeLists.txt @@ -37,6 +37,5 @@ add_clang_executable(clang-cc RewriteMacros.cpp RewriteObjC.cpp RewriteTest.cpp - SerializationTest.cpp Warnings.cpp ) diff --git a/tools/clang-cc/SerializationTest.cpp b/tools/clang-cc/SerializationTest.cpp deleted file mode 100644 index 708328db77..0000000000 --- a/tools/clang-cc/SerializationTest.cpp +++ /dev/null @@ -1,226 +0,0 @@ -//===--- SerializationTest.cpp - Experimental Object Serialization --------===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file implements prototype code for serialization of objects in clang. -// It is not intended yet for public use, but simply is a placeholder to -// experiment with new serialization features. Serialization will eventually -// be integrated as a proper component of the clang libraries. -// -//===----------------------------------------------------------------------===// - -#include "clang/AST/ASTConsumer.h" -#include "clang/AST/ASTContext.h" -#include "clang/AST/CFG.h" -#include "clang/AST/Decl.h" -#include "clang/AST/DeclGroup.h" -#include "clang-cc.h" -#include "ASTConsumers.h" -#include "llvm/Support/MemoryBuffer.h" -#include "llvm/ADT/OwningPtr.h" -#include "llvm/Support/Streams.h" -#include "llvm/System/Path.h" -#include -#include -using namespace clang; - -//===----------------------------------------------------------------------===// -// Driver code. -//===----------------------------------------------------------------------===// - -namespace { - -class SerializationTest : public ASTConsumer { - Diagnostic &Diags; - FileManager &FMgr; -public: - SerializationTest(Diagnostic &d, FileManager& fmgr) - : Diags(d), FMgr(fmgr) {} - - ~SerializationTest() {} - - virtual void HandleTranslationUnit(ASTContext &C); - -private: - bool Serialize(llvm::sys::Path& Filename, llvm::sys::Path& FNameDeclPrint, - ASTContext &Ctx); - - bool Deserialize(llvm::sys::Path& Filename, llvm::sys::Path& FNameDeclPrint); -}; - -} // end anonymous namespace - -ASTConsumer* -clang::CreateSerializationTest(Diagnostic &Diags, FileManager& FMgr) { - return new SerializationTest(Diags, FMgr); -} - - -bool SerializationTest::Serialize(llvm::sys::Path& Filename, - llvm::sys::Path& FNameDeclPrint, - ASTContext &Ctx) { - { - // Pretty-print the decls to a temp file. - std::string Err; - llvm::raw_fd_ostream DeclPP(FNameDeclPrint.c_str(), true, Err); - assert (Err.empty() && "Could not open file for printing out decls."); - llvm::OwningPtr FilePrinter(CreateASTPrinter(&DeclPP)); - - TranslationUnitDecl *TUD = Ctx.getTranslationUnitDecl(); - for (DeclContext::decl_iterator I = TUD->decls_begin(Ctx), - E = TUD->decls_end(Ctx); - I != E; ++I) - FilePrinter->HandleTopLevelDecl(DeclGroupRef(*I)); - } - - // Serialize the translation unit. - - // Reserve 256K for bitstream buffer. - std::vector Buffer; - Buffer.reserve(256*1024); - - Ctx.EmitASTBitcodeBuffer(Buffer); - - // Write the bits to disk. - if (FILE* fp = fopen(Filename.c_str(),"wb")) { - fwrite((char*)&Buffer.front(), sizeof(char), Buffer.size(), fp); - fclose(fp); - return true; - } - - return false; -} - -bool SerializationTest::Deserialize(llvm::sys::Path& Filename, - llvm::sys::Path& FNameDeclPrint) { - - // Deserialize the translation unit. - ASTContext *NewCtx; - - { - // Create the memory buffer that contains the contents of the file. - llvm::OwningPtr - MBuffer(llvm::MemoryBuffer::getFile(Filename.c_str())); - - if (!MBuffer) - return false; - - NewCtx = ASTContext::ReadASTBitcodeBuffer(*MBuffer, FMgr); - } - - if (!NewCtx) - return false; - - { - // Pretty-print the deserialized decls to a temp file. - std::string Err; - llvm::raw_fd_ostream DeclPP(FNameDeclPrint.c_str(), true, Err); - assert (Err.empty() && "Could not open file for printing out decls."); - llvm::OwningPtr FilePrinter(CreateASTPrinter(&DeclPP)); - - TranslationUnitDecl *TUD = NewCtx->getTranslationUnitDecl(); - for (DeclContext::decl_iterator I = TUD->decls_begin(*NewCtx), - E = TUD->decls_end(*NewCtx); - I != E; ++I) - FilePrinter->HandleTopLevelDecl(DeclGroupRef(*I)); - } - - delete NewCtx; - - return true; -} - -namespace { - class TmpDirJanitor { - llvm::sys::Path& Dir; - public: - explicit TmpDirJanitor(llvm::sys::Path& dir) : Dir(dir) {} - - ~TmpDirJanitor() { - llvm::cerr << "Removing: " << Dir.c_str() << '\n'; - Dir.eraseFromDisk(true); - } - }; -} - -void SerializationTest::HandleTranslationUnit(ASTContext &Ctx) { - - std::string ErrMsg; - llvm::sys::Path Dir = llvm::sys::Path::GetTemporaryDirectory(&ErrMsg); - - if (Dir.isEmpty()) { - llvm::cerr << "Error: " << ErrMsg << "\n"; - return; - } - - TmpDirJanitor RemoveTmpOnExit(Dir); - - llvm::sys::Path FNameDeclBefore = Dir; - FNameDeclBefore.appendComponent("test.decl_before.txt"); - - if (FNameDeclBefore.makeUnique(true, &ErrMsg)) { - llvm::cerr << "Error: " << ErrMsg << "\n"; - return; - } - - llvm::sys::Path FNameDeclAfter = Dir; - FNameDeclAfter.appendComponent("test.decl_after.txt"); - - if (FNameDeclAfter.makeUnique(true, &ErrMsg)) { - llvm::cerr << "Error: " << ErrMsg << "\n"; - return; - } - - llvm::sys::Path ASTFilename = Dir; - ASTFilename.appendComponent("test.ast"); - - if (ASTFilename.makeUnique(true, &ErrMsg)) { - llvm::cerr << "Error: " << ErrMsg << "\n"; - return; - } - - // Serialize and then deserialize the ASTs. - bool status = Serialize(ASTFilename, FNameDeclBefore, Ctx); - assert (status && "Serialization failed."); - status = Deserialize(ASTFilename, FNameDeclAfter); - assert (status && "Deserialization failed."); - - // Read both pretty-printed files and compare them. - - using llvm::MemoryBuffer; - - llvm::OwningPtr - MBufferSer(MemoryBuffer::getFile(FNameDeclBefore.c_str())); - - if(!MBufferSer) { - llvm::cerr << "ERROR: Cannot read pretty-printed file (pre-pickle).\n"; - return; - } - - llvm::OwningPtr - MBufferDSer(MemoryBuffer::getFile(FNameDeclAfter.c_str())); - - if(!MBufferDSer) { - llvm::cerr << "ERROR: Cannot read pretty-printed file (post-pickle).\n"; - return; - } - - const char *p1 = MBufferSer->getBufferStart(); - const char *e1 = MBufferSer->getBufferEnd(); - const char *p2 = MBufferDSer->getBufferStart(); - const char *e2 = MBufferDSer->getBufferEnd(); - - if (MBufferSer->getBufferSize() == MBufferDSer->getBufferSize()) - for ( ; p1 != e1 ; ++p1, ++p2 ) - if (*p1 != *p2) break; - - if (p1 != e1 || p2 != e2 ) - llvm::cerr << "ERROR: Pretty-printed files are not the same.\n"; - else - llvm::cerr << "SUCCESS: Pretty-printed files are the same.\n"; -} diff --git a/tools/clang-cc/clang-cc.cpp b/tools/clang-cc/clang-cc.cpp index 37233134da..af8b5b6243 100644 --- a/tools/clang-cc/clang-cc.cpp +++ b/tools/clang-cc/clang-cc.cpp @@ -180,13 +180,11 @@ enum ProgActions { EmitLLVM, // Emit a .ll file. EmitBC, // Emit a .bc file. EmitLLVMOnly, // Generate LLVM IR, but do not - SerializeAST, // Emit a .ast file. EmitHTML, // Translate input source into HTML. ASTPrint, // Parse ASTs and print them. ASTDump, // Parse ASTs and dump them. ASTView, // Parse ASTs and view them in Graphviz. PrintDeclContext, // Print DeclContext and their Decls. - TestSerialization, // Run experimental serialization code. ParsePrintCallbacks, // Parse and print each callback. ParseSyntaxOnly, // Parse and perform semantic analysis. ParseNoop, // Parse with noop callbacks. @@ -234,8 +232,6 @@ ProgAction(llvm::cl::desc("Choose output type:"), llvm::cl::ZeroOrMore, "Generate pre-tokenized header file"), clEnumValN(GeneratePCH, "emit-pch", "Generate pre-compiled header file"), - clEnumValN(TestSerialization, "test-pickling", - "Run prototype serialization code"), clEnumValN(EmitAssembly, "S", "Emit native assembly code"), clEnumValN(EmitLLVM, "emit-llvm", @@ -244,8 +240,6 @@ ProgAction(llvm::cl::desc("Choose output type:"), llvm::cl::ZeroOrMore, "Build ASTs then convert to LLVM, emit .bc file"), clEnumValN(EmitLLVMOnly, "emit-llvm-only", "Build ASTs and convert to LLVM, discarding output"), - clEnumValN(SerializeAST, "serialize", - "Build ASTs and emit .ast file"), clEnumValN(RewriteTest, "rewrite-test", "Rewriter playground"), clEnumValN(RewriteObjC, "rewrite-objc", @@ -262,7 +256,7 @@ ProgAction(llvm::cl::desc("Choose output type:"), llvm::cl::ZeroOrMore, static llvm::cl::opt OutputFile("o", llvm::cl::value_desc("path"), - llvm::cl::desc("Specify output file (for --serialize, this is a directory)")); + llvm::cl::desc("Specify output file")); //===----------------------------------------------------------------------===// @@ -1559,9 +1553,6 @@ static ASTConsumer *CreateASTConsumer(const std::string& InFile, case InheritanceView: return CreateInheritanceViewer(InheritanceViewCls); - case TestSerialization: - return CreateSerializationTest(Diag, FileMgr); - case EmitAssembly: case EmitLLVM: case EmitBC: @@ -1582,12 +1573,7 @@ static ASTConsumer *CreateASTConsumer(const std::string& InFile, InFile, OutputFile); } - case SerializeAST: - // FIXME: Allow user to tailor where the file is written. - return CreateASTSerializer(InFile, OutputFile, Diag); - case GeneratePCH: - assert(PP && "Generate PCH doesn't work from serialized file yet"); return CreatePCHGenerator(*PP, OutputFile); case RewriteObjC: @@ -1841,70 +1827,9 @@ static void ProcessInputFile(Preprocessor &PP, PreprocessorFactory &PPF, Consumer.take(); } -static void ProcessSerializedFile(const std::string& InFile, Diagnostic& Diag, - FileManager& FileMgr) { - - if (VerifyDiagnostics) { - fprintf(stderr, "-verify does not yet work with serialized ASTs.\n"); - exit (1); - } - - llvm::sys::Path Filename(InFile); - - if (!Filename.isValid()) { - fprintf(stderr, "serialized file '%s' not available.\n",InFile.c_str()); - exit (1); - } - - llvm::OwningPtr Ctx; - - // Create the memory buffer that contains the contents of the file. - llvm::OwningPtr - MBuffer(llvm::MemoryBuffer::getFile(Filename.c_str())); - - if (MBuffer) - Ctx.reset(ASTContext::ReadASTBitcodeBuffer(*MBuffer, FileMgr)); - - if (!Ctx) { - fprintf(stderr, "error: file '%s' could not be deserialized\n", - InFile.c_str()); - exit (1); - } - - // Observe that we use the source file name stored in the deserialized - // translation unit, rather than InFile. - llvm::OwningPtr - Consumer(CreateASTConsumer(InFile, Diag, FileMgr, Ctx->getLangOptions(), - 0, 0)); - - if (!Consumer) { - fprintf(stderr, "Unsupported program action with serialized ASTs!\n"); - exit (1); - } - - Consumer->Initialize(*Ctx); - - // FIXME: We need to inform Consumer about completed TagDecls as well. - TranslationUnitDecl *TUD = Ctx->getTranslationUnitDecl(); - for (DeclContext::decl_iterator I = TUD->decls_begin(*Ctx), - E = TUD->decls_end(*Ctx); - I != E; ++I) - Consumer->HandleTopLevelDecl(DeclGroupRef(*I)); -} - - static llvm::cl::list InputFilenames(llvm::cl::Positional, llvm::cl::desc("")); -static bool isSerializedFile(const std::string& InFile) { - if (InFile.size() < 4) - return false; - - const char* s = InFile.c_str()+InFile.size()-4; - return s[0] == '.' && s[1] == 'a' && s[2] == 's' && s[3] == 't'; -} - - int main(int argc, char **argv) { llvm::sys::PrintStackTraceOnErrorSignal(); llvm::PrettyStackTraceProgram X(argc, argv); @@ -1991,11 +1916,6 @@ int main(int argc, char **argv) { for (unsigned i = 0, e = InputFilenames.size(); i != e; ++i) { const std::string &InFile = InputFilenames[i]; - if (isSerializedFile(InFile)) { - ProcessSerializedFile(InFile,Diags,FileMgr); - continue; - } - /// Create a SourceManager object. This tracks and owns all the file /// buffers allocated to a translation unit. if (!SourceMgr) -- 2.40.0