зеркало из https://github.com/microsoft/clang-1.git
ParseAST now conditionally deletes the passed ASTConsumer.
ModuleBuilder now performs llvmgen in HandleTranslationUnit. This patch follows from the discussion on the following thread on cfe-commits: http://lists.cs.uiuc.edu/pipermail/cfe-commits/Week-of-Mon-20080804/006849.html git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@54486 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
57134339c8
Коммит
159346a82b
|
@ -21,7 +21,7 @@ namespace clang {
|
|||
/// ParseAST - Parse the entire file specified, notifying the ASTConsumer as
|
||||
/// the file is parsed. This takes ownership of the ASTConsumer and
|
||||
/// ultimately deletes it.
|
||||
void ParseAST(Preprocessor &pp, ASTConsumer *C, bool PrintStats = false);
|
||||
void ParseAST(Preprocessor &pp, ASTConsumer *C, bool PrintStats = false, bool DeleteConsumer = true);
|
||||
} // end namespace clang
|
||||
|
||||
#endif
|
||||
|
|
|
@ -49,13 +49,7 @@ namespace {
|
|||
|
||||
virtual ~CodeGeneratorImpl() {}
|
||||
|
||||
virtual llvm::Module* ReleaseModule() {
|
||||
if (Diags.hasErrorOccurred())
|
||||
return 0;
|
||||
|
||||
if (Builder)
|
||||
Builder->Release();
|
||||
|
||||
virtual llvm::Module* ReleaseModule() {
|
||||
return M.take();
|
||||
}
|
||||
|
||||
|
@ -134,7 +128,16 @@ namespace {
|
|||
virtual void HandleTagDeclDefinition(TagDecl *D) {
|
||||
Builder->UpdateCompletedType(D);
|
||||
}
|
||||
|
||||
|
||||
virtual void HandleTranslationUnit(TranslationUnit& TU) {
|
||||
if (Diags.hasErrorOccurred()) {
|
||||
M.reset();
|
||||
return;
|
||||
}
|
||||
|
||||
if (Builder)
|
||||
Builder->Release();
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -27,7 +27,7 @@ using namespace clang;
|
|||
/// ParseAST - Parse the entire file specified, notifying the ASTConsumer as
|
||||
/// the file is parsed. This takes ownership of the ASTConsumer and
|
||||
/// ultimately deletes it.
|
||||
void clang::ParseAST(Preprocessor &PP, ASTConsumer *Consumer, bool PrintStats) {
|
||||
void clang::ParseAST(Preprocessor &PP, ASTConsumer *Consumer, bool PrintStats, bool DeleteConsumer) {
|
||||
// Collect global stats on Decls/Stmts (until we have a module streamer).
|
||||
if (PrintStats) {
|
||||
Decl::CollectingStats(true);
|
||||
|
@ -78,5 +78,6 @@ void clang::ParseAST(Preprocessor &PP, ASTConsumer *Consumer, bool PrintStats) {
|
|||
Stmt::CollectingStats(false);
|
||||
}
|
||||
|
||||
delete Consumer;
|
||||
if (DeleteConsumer)
|
||||
delete Consumer;
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче