mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-02-05 08:58:30 +00:00
Refactor to remove the assumption that we know the name of the module we're emitting at the point when we create a PCHGenerator (with the C++ modules TS, we find that out part way through parsing the input).
llvm-svn: 279766
This commit is contained in:
parent
084148fcc3
commit
bd97f35339
@ -909,7 +909,6 @@ public:
|
||||
class PCHGenerator : public SemaConsumer {
|
||||
const Preprocessor &PP;
|
||||
std::string OutputFile;
|
||||
clang::Module *Module;
|
||||
std::string isysroot;
|
||||
Sema *SemaPtr;
|
||||
std::shared_ptr<PCHBuffer> Buffer;
|
||||
@ -925,7 +924,7 @@ protected:
|
||||
public:
|
||||
PCHGenerator(
|
||||
const Preprocessor &PP, StringRef OutputFile,
|
||||
clang::Module *Module, StringRef isysroot,
|
||||
StringRef isysroot,
|
||||
std::shared_ptr<PCHBuffer> Buffer,
|
||||
ArrayRef<llvm::IntrusiveRefCntPtr<ModuleFileExtension>> Extensions,
|
||||
bool AllowASTWithErrors = false,
|
||||
|
@ -925,7 +925,7 @@ public:
|
||||
PrecompilePreambleConsumer(ASTUnit &Unit, PrecompilePreambleAction *Action,
|
||||
const Preprocessor &PP, StringRef isysroot,
|
||||
std::unique_ptr<raw_ostream> Out)
|
||||
: PCHGenerator(PP, "", nullptr, isysroot, std::make_shared<PCHBuffer>(),
|
||||
: PCHGenerator(PP, "", isysroot, std::make_shared<PCHBuffer>(),
|
||||
ArrayRef<llvm::IntrusiveRefCntPtr<ModuleFileExtension>>(),
|
||||
/*AllowASTWithErrors=*/true),
|
||||
Unit(Unit), Hash(Unit.getCurrentTopLevelHashValue()), Action(Action),
|
||||
|
@ -161,7 +161,7 @@ IntrusiveRefCntPtr<ExternalSemaSource> clang::createChainedIncludesSource(
|
||||
auto Buffer = std::make_shared<PCHBuffer>();
|
||||
ArrayRef<llvm::IntrusiveRefCntPtr<ModuleFileExtension>> Extensions;
|
||||
auto consumer = llvm::make_unique<PCHGenerator>(
|
||||
Clang->getPreprocessor(), "-", nullptr, /*isysroot=*/"", Buffer,
|
||||
Clang->getPreprocessor(), "-", /*isysroot=*/"", Buffer,
|
||||
Extensions, /*AllowASTWithErrors=*/true);
|
||||
Clang->getASTContext().setASTMutationListener(
|
||||
consumer->GetASTMutationListener());
|
||||
|
@ -91,7 +91,7 @@ GeneratePCHAction::CreateASTConsumer(CompilerInstance &CI, StringRef InFile) {
|
||||
auto Buffer = std::make_shared<PCHBuffer>();
|
||||
std::vector<std::unique_ptr<ASTConsumer>> Consumers;
|
||||
Consumers.push_back(llvm::make_unique<PCHGenerator>(
|
||||
CI.getPreprocessor(), OutputFile, nullptr, Sysroot,
|
||||
CI.getPreprocessor(), OutputFile, Sysroot,
|
||||
Buffer, CI.getFrontendOpts().ModuleFileExtensions,
|
||||
/*AllowASTWithErrors*/false,
|
||||
/*IncludeTimestamps*/
|
||||
@ -141,7 +141,7 @@ GenerateModuleAction::CreateASTConsumer(CompilerInstance &CI,
|
||||
std::vector<std::unique_ptr<ASTConsumer>> Consumers;
|
||||
|
||||
Consumers.push_back(llvm::make_unique<PCHGenerator>(
|
||||
CI.getPreprocessor(), OutputFile, Module, Sysroot,
|
||||
CI.getPreprocessor(), OutputFile, Sysroot,
|
||||
Buffer, CI.getFrontendOpts().ModuleFileExtensions,
|
||||
/*AllowASTWithErrors=*/false,
|
||||
/*IncludeTimestamps=*/
|
||||
|
@ -13,6 +13,7 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "clang/AST/ASTContext.h"
|
||||
#include "clang/Lex/HeaderSearch.h"
|
||||
#include "clang/Lex/Preprocessor.h"
|
||||
#include "clang/Sema/SemaConsumer.h"
|
||||
#include "clang/Serialization/ASTWriter.h"
|
||||
@ -21,12 +22,11 @@
|
||||
using namespace clang;
|
||||
|
||||
PCHGenerator::PCHGenerator(
|
||||
const Preprocessor &PP, StringRef OutputFile,
|
||||
clang::Module *Module, StringRef isysroot,
|
||||
std::shared_ptr<PCHBuffer> Buffer,
|
||||
ArrayRef<llvm::IntrusiveRefCntPtr<ModuleFileExtension>> Extensions,
|
||||
bool AllowASTWithErrors, bool IncludeTimestamps)
|
||||
: PP(PP), OutputFile(OutputFile), Module(Module), isysroot(isysroot.str()),
|
||||
const Preprocessor &PP, StringRef OutputFile, StringRef isysroot,
|
||||
std::shared_ptr<PCHBuffer> Buffer,
|
||||
ArrayRef<llvm::IntrusiveRefCntPtr<ModuleFileExtension>> Extensions,
|
||||
bool AllowASTWithErrors, bool IncludeTimestamps)
|
||||
: PP(PP), OutputFile(OutputFile), isysroot(isysroot.str()),
|
||||
SemaPtr(nullptr), Buffer(Buffer), Stream(Buffer->Data),
|
||||
Writer(Stream, Extensions, IncludeTimestamps),
|
||||
AllowASTWithErrors(AllowASTWithErrors) {
|
||||
@ -45,6 +45,13 @@ void PCHGenerator::HandleTranslationUnit(ASTContext &Ctx) {
|
||||
if (hasErrors && !AllowASTWithErrors)
|
||||
return;
|
||||
|
||||
Module *Module = nullptr;
|
||||
if (PP.getLangOpts().CompilingModule) {
|
||||
Module = PP.getHeaderSearchInfo().lookupModule(
|
||||
PP.getLangOpts().CurrentModule, /*AllowSearch*/ false);
|
||||
assert(Module && "emitting module but current module doesn't exist");
|
||||
}
|
||||
|
||||
// Emit the PCH file to the Buffer.
|
||||
assert(SemaPtr && "No Sema?");
|
||||
Buffer->Signature =
|
||||
|
Loading…
x
Reference in New Issue
Block a user