Author: dgregor Date: Tue Dec 8 16:43:32 2015 New Revision: 255065 URL: http://llvm.org/viewvc/llvm-project?rev=255065&view=rev Log: Module file extensions: pass a Sema through to the extension writer.
Module file extensions are likely to need access to Sema/Preprocessor/ASTContext, and cannot get it through other sources. Modified: cfe/trunk/include/clang/Serialization/ASTWriter.h cfe/trunk/include/clang/Serialization/ModuleFileExtension.h cfe/trunk/lib/Frontend/TestModuleFileExtension.cpp cfe/trunk/lib/Frontend/TestModuleFileExtension.h cfe/trunk/lib/Serialization/ASTWriter.cpp Modified: cfe/trunk/include/clang/Serialization/ASTWriter.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Serialization/ASTWriter.h?rev=255065&r1=255064&r2=255065&view=diff ============================================================================== --- cfe/trunk/include/clang/Serialization/ASTWriter.h (original) +++ cfe/trunk/include/clang/Serialization/ASTWriter.h Tue Dec 8 16:43:32 2015 @@ -551,7 +551,8 @@ private: void WriteObjCCategories(); void WriteLateParsedTemplates(Sema &SemaRef); void WriteOptimizePragmaOptions(Sema &SemaRef); - void WriteModuleFileExtension(ModuleFileExtensionWriter &Writer); + void WriteModuleFileExtension(Sema &SemaRef, + ModuleFileExtensionWriter &Writer); unsigned DeclParmVarAbbrev; unsigned DeclContextLexicalAbbrev; Modified: cfe/trunk/include/clang/Serialization/ModuleFileExtension.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Serialization/ModuleFileExtension.h?rev=255065&r1=255064&r2=255065&view=diff ============================================================================== --- cfe/trunk/include/clang/Serialization/ModuleFileExtension.h (original) +++ cfe/trunk/include/clang/Serialization/ModuleFileExtension.h Tue Dec 8 16:43:32 2015 @@ -25,7 +25,8 @@ namespace clang { class ASTReader; class ASTWriter; - +class Sema; + namespace serialization { class ModuleFile; } // end namespace serialization @@ -79,7 +80,7 @@ public: /// The default implementation of this function simply returns the /// hash code as given, so the presence/absence of this extension /// does not distinguish module files. - virtual llvm::hash_code hashExtension(llvm::hash_code Code) const; + virtual llvm::hash_code hashExtension(llvm::hash_code c) const; /// Create a new module file extension writer, which will be /// responsible for writing the extension contents into a particular @@ -120,7 +121,8 @@ public: /// Responsible for writing the contents of the extension into the /// given stream. All of the contents should be written into custom /// records with IDs >= FIRST_EXTENSION_RECORD_ID. - virtual void writeExtensionContents(llvm::BitstreamWriter &Stream) = 0; + virtual void writeExtensionContents(Sema &SemaRef, + llvm::BitstreamWriter &Stream) = 0; }; /// Abstract base class that reads a module file extension block from Modified: cfe/trunk/lib/Frontend/TestModuleFileExtension.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/TestModuleFileExtension.cpp?rev=255065&r1=255064&r2=255065&view=diff ============================================================================== --- cfe/trunk/lib/Frontend/TestModuleFileExtension.cpp (original) +++ cfe/trunk/lib/Frontend/TestModuleFileExtension.cpp Tue Dec 8 16:43:32 2015 @@ -19,6 +19,7 @@ using namespace clang::serialization; TestModuleFileExtension::Writer::~Writer() { } void TestModuleFileExtension::Writer::writeExtensionContents( + Sema &SemaRef, llvm::BitstreamWriter &Stream) { using namespace llvm; Modified: cfe/trunk/lib/Frontend/TestModuleFileExtension.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/TestModuleFileExtension.h?rev=255065&r1=255064&r2=255065&view=diff ============================================================================== --- cfe/trunk/lib/Frontend/TestModuleFileExtension.h (original) +++ cfe/trunk/lib/Frontend/TestModuleFileExtension.h Tue Dec 8 16:43:32 2015 @@ -30,7 +30,8 @@ class TestModuleFileExtension : public M Writer(ModuleFileExtension *Ext) : ModuleFileExtensionWriter(Ext) { } ~Writer() override; - void writeExtensionContents(llvm::BitstreamWriter &Stream) override; + void writeExtensionContents(Sema &SemaRef, + llvm::BitstreamWriter &Stream) override; }; class Reader : public ModuleFileExtensionReader { Modified: cfe/trunk/lib/Serialization/ASTWriter.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTWriter.cpp?rev=255065&r1=255064&r2=255065&view=diff ============================================================================== --- cfe/trunk/lib/Serialization/ASTWriter.cpp (original) +++ cfe/trunk/lib/Serialization/ASTWriter.cpp Tue Dec 8 16:43:32 2015 @@ -3880,7 +3880,8 @@ void ASTWriter::WriteOptimizePragmaOptio Stream.EmitRecord(OPTIMIZE_PRAGMA_OPTIONS, Record); } -void ASTWriter::WriteModuleFileExtension(ModuleFileExtensionWriter &Writer) { +void ASTWriter::WriteModuleFileExtension(Sema &SemaRef, + ModuleFileExtensionWriter &Writer) { // Enter the extension block. Stream.EnterSubblock(EXTENSION_BLOCK_ID, 4); @@ -3908,7 +3909,7 @@ void ASTWriter::WriteModuleFileExtension Stream.EmitRecordWithBlob(Abbrev, Record, Buffer); // Emit the contents of the extension block. - Writer.writeExtensionContents(Stream); + Writer.writeExtensionContents(SemaRef, Stream); // Exit the extension block. Stream.ExitBlock(); @@ -4563,7 +4564,7 @@ uint64_t ASTWriter::WriteASTCore(Sema &S // Write the module file extension blocks. for (const auto &ExtWriter : ModuleFileExtensionWriters) - WriteModuleFileExtension(*ExtWriter); + WriteModuleFileExtension(SemaRef, *ExtWriter); return Signature; } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits