mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-12-11 08:48:12 +00:00
When writing a module file, pass the module through to the AST
writer. No functionality change. llvm-svn: 145479
This commit is contained in:
parent
1805b8a42f
commit
f7a700fd01
@ -11,6 +11,7 @@
|
||||
#define LLVM_CLANG_FRONTEND_FRONTENDACTIONS_H
|
||||
|
||||
#include "clang/Frontend/FrontendAction.h"
|
||||
#include "clang/Lex/ModuleMap.h"
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
@ -92,6 +93,8 @@ public:
|
||||
};
|
||||
|
||||
class GenerateModuleAction : public ASTFrontendAction {
|
||||
ModuleMap::Module *Module;
|
||||
|
||||
protected:
|
||||
virtual ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
|
||||
StringRef InFile);
|
||||
|
@ -18,6 +18,7 @@
|
||||
#include "clang/AST/DeclarationName.h"
|
||||
#include "clang/AST/TemplateBase.h"
|
||||
#include "clang/AST/ASTMutationListener.h"
|
||||
#include "clang/Lex/ModuleMap.h"
|
||||
#include "clang/Serialization/ASTBitCodes.h"
|
||||
#include "clang/Serialization/ASTDeserializationListener.h"
|
||||
#include "clang/Sema/SemaConsumer.h"
|
||||
@ -412,7 +413,7 @@ private:
|
||||
|
||||
void WriteASTCore(Sema &SemaRef, MemorizeStatCalls *StatCalls,
|
||||
StringRef isysroot, const std::string &OutputFile,
|
||||
bool IsModule);
|
||||
ModuleMap::Module *WritingModule);
|
||||
|
||||
public:
|
||||
/// \brief Create a new precompiled header writer that outputs to
|
||||
@ -428,14 +429,14 @@ public:
|
||||
/// \param StatCalls the object that cached all of the stat() calls made while
|
||||
/// searching for source files and headers.
|
||||
///
|
||||
/// \param IsModule Whether we're writing a module (otherwise, we're writing a
|
||||
/// precompiled header).
|
||||
/// \param WritingModule The module that we are writing. If null, we are
|
||||
/// writing a precompiled header.
|
||||
///
|
||||
/// \param isysroot if non-empty, write a relocatable file whose headers
|
||||
/// are relative to the given system root.
|
||||
void WriteAST(Sema &SemaRef, MemorizeStatCalls *StatCalls,
|
||||
const std::string &OutputFile,
|
||||
bool IsModule, StringRef isysroot);
|
||||
ModuleMap::Module *WritingModule, StringRef isysroot);
|
||||
|
||||
/// \brief Emit a source location.
|
||||
void AddSourceLocation(SourceLocation Loc, RecordDataImpl &Record);
|
||||
@ -672,7 +673,7 @@ public:
|
||||
class PCHGenerator : public SemaConsumer {
|
||||
const Preprocessor &PP;
|
||||
std::string OutputFile;
|
||||
bool IsModule;
|
||||
ModuleMap::Module *Module;
|
||||
std::string isysroot;
|
||||
raw_ostream *Out;
|
||||
Sema *SemaPtr;
|
||||
@ -687,7 +688,7 @@ protected:
|
||||
|
||||
public:
|
||||
PCHGenerator(const Preprocessor &PP, StringRef OutputFile,
|
||||
bool IsModule,
|
||||
ModuleMap::Module *Module,
|
||||
StringRef isysroot, raw_ostream *Out);
|
||||
~PCHGenerator();
|
||||
virtual void InitializeSema(Sema &S) { SemaPtr = &S; }
|
||||
|
@ -924,7 +924,7 @@ class PrecompilePreambleConsumer : public PCHGenerator {
|
||||
public:
|
||||
PrecompilePreambleConsumer(ASTUnit &Unit, const Preprocessor &PP,
|
||||
StringRef isysroot, raw_ostream *Out)
|
||||
: PCHGenerator(PP, "", /*IsModule=*/false, isysroot, Out), Unit(Unit),
|
||||
: PCHGenerator(PP, "", 0, isysroot, Out), Unit(Unit),
|
||||
Hash(Unit.getCurrentTopLevelHashValue()) {
|
||||
Hash = 0;
|
||||
}
|
||||
@ -2423,7 +2423,7 @@ bool ASTUnit::serialize(raw_ostream &OS) {
|
||||
llvm::BitstreamWriter Stream(Buffer);
|
||||
ASTWriter Writer(Stream);
|
||||
// FIXME: Handle modules
|
||||
Writer.WriteAST(getSema(), 0, std::string(), /*IsModule=*/false, "");
|
||||
Writer.WriteAST(getSema(), 0, std::string(), 0, "");
|
||||
|
||||
// Write the generated bitstream to "Out".
|
||||
if (!Buffer.empty())
|
||||
|
@ -86,8 +86,7 @@ ASTConsumer *GeneratePCHAction::CreateASTConsumer(CompilerInstance &CI,
|
||||
|
||||
if (!CI.getFrontendOpts().RelocatablePCH)
|
||||
Sysroot.clear();
|
||||
return new PCHGenerator(CI.getPreprocessor(), OutputFile, /*Module=*/false,
|
||||
Sysroot, OS);
|
||||
return new PCHGenerator(CI.getPreprocessor(), OutputFile, 0, Sysroot, OS);
|
||||
}
|
||||
|
||||
bool GeneratePCHAction::ComputeASTConsumerArguments(CompilerInstance &CI,
|
||||
@ -122,7 +121,7 @@ ASTConsumer *GenerateModuleAction::CreateASTConsumer(CompilerInstance &CI,
|
||||
if (ComputeASTConsumerArguments(CI, InFile, Sysroot, OutputFile, OS))
|
||||
return 0;
|
||||
|
||||
return new PCHGenerator(CI.getPreprocessor(), OutputFile, /*MakeModule=*/true,
|
||||
return new PCHGenerator(CI.getPreprocessor(), OutputFile, Module,
|
||||
Sysroot, OS);
|
||||
}
|
||||
|
||||
@ -184,8 +183,7 @@ bool GenerateModuleAction::BeginSourceFileAction(CompilerInstance &CI,
|
||||
}
|
||||
|
||||
// Dig out the module definition.
|
||||
ModuleMap::Module *Module = HS.getModule(CI.getLangOpts().CurrentModule,
|
||||
/*AllowSearch=*/false);
|
||||
Module = HS.getModule(CI.getLangOpts().CurrentModule, /*AllowSearch=*/false);
|
||||
if (!Module) {
|
||||
CI.getDiagnostics().Report(diag::err_missing_module)
|
||||
<< CI.getLangOpts().CurrentModule << Filename;
|
||||
|
@ -2791,7 +2791,7 @@ ASTWriter::~ASTWriter() {
|
||||
|
||||
void ASTWriter::WriteAST(Sema &SemaRef, MemorizeStatCalls *StatCalls,
|
||||
const std::string &OutputFile,
|
||||
bool IsModule, StringRef isysroot) {
|
||||
ModuleMap::Module *WritingModule, StringRef isysroot) {
|
||||
WritingAST = true;
|
||||
|
||||
// Emit the file header.
|
||||
@ -2803,7 +2803,7 @@ void ASTWriter::WriteAST(Sema &SemaRef, MemorizeStatCalls *StatCalls,
|
||||
WriteBlockInfoBlock();
|
||||
|
||||
Context = &SemaRef.Context;
|
||||
WriteASTCore(SemaRef, StatCalls, isysroot, OutputFile, IsModule);
|
||||
WriteASTCore(SemaRef, StatCalls, isysroot, OutputFile, WritingModule);
|
||||
Context = 0;
|
||||
|
||||
WritingAST = false;
|
||||
@ -2820,7 +2820,8 @@ static void AddLazyVectorDecls(ASTWriter &Writer, Vector &Vec,
|
||||
|
||||
void ASTWriter::WriteASTCore(Sema &SemaRef, MemorizeStatCalls *StatCalls,
|
||||
StringRef isysroot,
|
||||
const std::string &OutputFile, bool IsModule) {
|
||||
const std::string &OutputFile,
|
||||
ModuleMap::Module *WritingModule) {
|
||||
using namespace llvm;
|
||||
|
||||
ASTContext &Context = SemaRef.Context;
|
||||
@ -3086,11 +3087,11 @@ void ASTWriter::WriteASTCore(Sema &SemaRef, MemorizeStatCalls *StatCalls,
|
||||
Buffer.data(), Buffer.size());
|
||||
}
|
||||
|
||||
WritePreprocessor(PP, IsModule);
|
||||
WritePreprocessor(PP, WritingModule != 0);
|
||||
WriteHeaderSearch(PP.getHeaderSearchInfo(), isysroot);
|
||||
WriteSelectors(SemaRef);
|
||||
WriteReferencedSelectorsPool(SemaRef);
|
||||
WriteIdentifierTable(PP, SemaRef.IdResolver, IsModule);
|
||||
WriteIdentifierTable(PP, SemaRef.IdResolver, WritingModule != 0);
|
||||
WriteFPPragmaOptions(SemaRef.getFPOptions());
|
||||
WriteOpenCLExtensions(SemaRef);
|
||||
|
||||
|
@ -105,8 +105,8 @@ ChainedIncludesSource *ChainedIncludesSource::create(CompilerInstance &CI) {
|
||||
SmallVector<char, 256> serialAST;
|
||||
llvm::raw_svector_ostream OS(serialAST);
|
||||
llvm::OwningPtr<ASTConsumer> consumer;
|
||||
consumer.reset(new PCHGenerator(Clang->getPreprocessor(), "-",
|
||||
/*IsModule=*/false, /*isysroot=*/"", &OS));
|
||||
consumer.reset(new PCHGenerator(Clang->getPreprocessor(), "-", 0,
|
||||
/*isysroot=*/"", &OS));
|
||||
Clang->getASTContext().setASTMutationListener(
|
||||
consumer->GetASTMutationListener());
|
||||
Clang->setASTConsumer(consumer.take());
|
||||
|
@ -28,10 +28,10 @@ using namespace clang;
|
||||
|
||||
PCHGenerator::PCHGenerator(const Preprocessor &PP,
|
||||
StringRef OutputFile,
|
||||
bool IsModule,
|
||||
ModuleMap::Module *Module,
|
||||
StringRef isysroot,
|
||||
raw_ostream *OS)
|
||||
: PP(PP), OutputFile(OutputFile), IsModule(IsModule),
|
||||
: PP(PP), OutputFile(OutputFile), Module(Module),
|
||||
isysroot(isysroot.str()), Out(OS),
|
||||
SemaPtr(0), StatCalls(0), Stream(Buffer), Writer(Stream) {
|
||||
// Install a stat() listener to keep track of all of the stat()
|
||||
@ -49,7 +49,7 @@ void PCHGenerator::HandleTranslationUnit(ASTContext &Ctx) {
|
||||
|
||||
// Emit the PCH file
|
||||
assert(SemaPtr && "No Sema?");
|
||||
Writer.WriteAST(*SemaPtr, StatCalls, OutputFile, IsModule, isysroot);
|
||||
Writer.WriteAST(*SemaPtr, StatCalls, OutputFile, Module, isysroot);
|
||||
|
||||
// Write the generated bitstream to "Out".
|
||||
Out->write((char *)&Buffer.front(), Buffer.size());
|
||||
|
Loading…
Reference in New Issue
Block a user