diff options
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/AST/ASTDumper.cpp | 8 | ||||
-rw-r--r-- | clang/lib/Frontend/ASTConsumers.cpp | 34 | ||||
-rw-r--r-- | clang/lib/Frontend/CompilerInvocation.cpp | 1 | ||||
-rw-r--r-- | clang/lib/Frontend/FrontendActions.cpp | 3 |
4 files changed, 27 insertions, 19 deletions
diff --git a/clang/lib/AST/ASTDumper.cpp b/clang/lib/AST/ASTDumper.cpp index 3554394ef2e..dddc4d4c18f 100644 --- a/clang/lib/AST/ASTDumper.cpp +++ b/clang/lib/AST/ASTDumper.cpp @@ -2031,13 +2031,15 @@ void Decl::dumpColor() const { } void DeclContext::dumpLookups() const { + dumpLookups(llvm::errs()); +} + +void DeclContext::dumpLookups(raw_ostream &OS) const { const DeclContext *DC = this; while (!DC->isTranslationUnit()) DC = DC->getParent(); ASTContext &Ctx = cast<TranslationUnitDecl>(DC)->getASTContext(); - - ASTDumper P(llvm::errs(), &Ctx.getCommentCommandTraits(), - &Ctx.getSourceManager()); + ASTDumper P(OS, &Ctx.getCommentCommandTraits(), &Ctx.getSourceManager()); P.dumpLookups(this); } diff --git a/clang/lib/Frontend/ASTConsumers.cpp b/clang/lib/Frontend/ASTConsumers.cpp index 4a63d76a73e..b9a34d46d8a 100644 --- a/clang/lib/Frontend/ASTConsumers.cpp +++ b/clang/lib/Frontend/ASTConsumers.cpp @@ -37,20 +37,15 @@ namespace { public: ASTPrinter(raw_ostream *Out = NULL, bool Dump = false, - StringRef FilterString = "") + StringRef FilterString = "", bool DumpLookups = false) : Out(Out ? *Out : llvm::outs()), Dump(Dump), - FilterString(FilterString) {} + FilterString(FilterString), DumpLookups(DumpLookups) {} virtual void HandleTranslationUnit(ASTContext &Context) { TranslationUnitDecl *D = Context.getTranslationUnitDecl(); - if (FilterString.empty()) { - if (Dump) - D->dump(Out); - else - D->print(Out, /*Indentation=*/0, /*PrintInstantiation=*/true); - return; - } + if (FilterString.empty()) + return print(D); TraverseDecl(D); } @@ -65,10 +60,7 @@ namespace { Out << (Dump ? "Dumping " : "Printing ") << getName(D) << ":\n"; if (ShowColors) Out.resetColor(); - if (Dump) - D->dump(Out); - else - D->print(Out, /*Indentation=*/0, /*PrintInstantiation=*/true); + print(D); Out << "\n"; // Don't traverse child nodes to avoid output duplication. return true; @@ -85,10 +77,22 @@ namespace { bool filterMatches(Decl *D) { return getName(D).find(FilterString) != std::string::npos; } + void print(Decl *D) { + if (DumpLookups) { + if (DeclContext *DC = dyn_cast<DeclContext>(D)) + DC->dumpLookups(Out); + else + Out << "Not a DeclContext\n"; + } else if (Dump) + D->dump(Out); + else + D->print(Out, /*Indentation=*/0, /*PrintInstantiation=*/true); + } raw_ostream &Out; bool Dump; std::string FilterString; + bool DumpLookups; }; class ASTDeclNodeLister : public ASTConsumer, @@ -119,8 +123,8 @@ ASTConsumer *clang::CreateASTPrinter(raw_ostream *Out, return new ASTPrinter(Out, /*Dump=*/ false, FilterString); } -ASTConsumer *clang::CreateASTDumper(StringRef FilterString) { - return new ASTPrinter(0, /*Dump=*/ true, FilterString); +ASTConsumer *clang::CreateASTDumper(StringRef FilterString, bool DumpLookups) { + return new ASTPrinter(0, /*Dump=*/ true, FilterString, DumpLookups); } ASTConsumer *clang::CreateASTDeclNodeLister() { diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp index d7d679fcc07..b699bb973e6 100644 --- a/clang/lib/Frontend/CompilerInvocation.cpp +++ b/clang/lib/Frontend/CompilerInvocation.cpp @@ -741,6 +741,7 @@ static InputKind ParseFrontendArgs(FrontendOptions &Opts, ArgList &Args, Opts.FixAndRecompile = Args.hasArg(OPT_fixit_recompile); Opts.FixToTemporaries = Args.hasArg(OPT_fixit_to_temp); Opts.ASTDumpFilter = Args.getLastArgValue(OPT_ast_dump_filter); + Opts.ASTDumpLookups = Args.hasArg(OPT_ast_dump_lookups); Opts.UseGlobalModuleIndex = !Args.hasArg(OPT_fno_modules_global_index); Opts.GenerateGlobalModuleIndex = Opts.UseGlobalModuleIndex; diff --git a/clang/lib/Frontend/FrontendActions.cpp b/clang/lib/Frontend/FrontendActions.cpp index 3b37e8a5c71..522c3ee84b2 100644 --- a/clang/lib/Frontend/FrontendActions.cpp +++ b/clang/lib/Frontend/FrontendActions.cpp @@ -54,7 +54,8 @@ ASTConsumer *ASTPrintAction::CreateASTConsumer(CompilerInstance &CI, ASTConsumer *ASTDumpAction::CreateASTConsumer(CompilerInstance &CI, StringRef InFile) { - return CreateASTDumper(CI.getFrontendOpts().ASTDumpFilter); + return CreateASTDumper(CI.getFrontendOpts().ASTDumpFilter, + CI.getFrontendOpts().ASTDumpLookups); } ASTConsumer *ASTDeclListAction::CreateASTConsumer(CompilerInstance &CI, |