diff options
author | Stephen Kelly <steveire@gmail.com> | 2018-10-24 23:33:55 +0300 |
---|---|---|
committer | Stephen Kelly <steveire@gmail.com> | 2018-10-24 23:33:55 +0300 |
commit | 70d771714ec6210df887139b2c1467c5acd79da1 (patch) | |
tree | 3b5fc2577ac3766bf691239ea725087cc4cb0eff /clang-tools-extra/clang-query | |
parent | 51707b21a0d7fe140fd0cf20f001192cecd301aa (diff) |
[clang-query] Refactor Output settings to booleans
Summary: This will make it possible to add non-exclusive mode output.
Reviewers: aaron.ballman
Subscribers: cfe-commits
Differential Revision: https://reviews.llvm.org/D53501
llvm-svn: 345194
Diffstat (limited to 'clang-tools-extra/clang-query')
-rw-r--r-- | clang-tools-extra/clang-query/Query.cpp | 11 | ||||
-rw-r--r-- | clang-tools-extra/clang-query/Query.h | 18 | ||||
-rw-r--r-- | clang-tools-extra/clang-query/QueryParser.cpp | 12 | ||||
-rw-r--r-- | clang-tools-extra/clang-query/QuerySession.h | 9 |
4 files changed, 39 insertions, 11 deletions
diff --git a/clang-tools-extra/clang-query/Query.cpp b/clang-tools-extra/clang-query/Query.cpp index abf1a32470de..48e20047701c 100644 --- a/clang-tools-extra/clang-query/Query.cpp +++ b/clang-tools-extra/clang-query/Query.cpp @@ -107,8 +107,7 @@ bool MatchQuery::run(llvm::raw_ostream &OS, QuerySession &QS) const { for (auto BI = MI->getMap().begin(), BE = MI->getMap().end(); BI != BE; ++BI) { - switch (QS.OutKind) { - case OK_Diag: { + if (QS.DiagOutput) { clang::SourceRange R = BI->second.getSourceRange(); if (R.isValid()) { TextDiagnostic TD(OS, AST->getASTContext().getLangOpts(), @@ -118,20 +117,16 @@ bool MatchQuery::run(llvm::raw_ostream &OS, QuerySession &QS) const { DiagnosticsEngine::Note, "\"" + BI->first + "\" binds here", CharSourceRange::getTokenRange(R), None); } - break; } - case OK_Print: { + if (QS.PrintOutput) { OS << "Binding for \"" << BI->first << "\":\n"; BI->second.print(OS, AST->getASTContext().getPrintingPolicy()); OS << "\n"; - break; } - case OK_DetailedAST: { + if (QS.DetailedASTOutput) { OS << "Binding for \"" << BI->first << "\":\n"; BI->second.dump(OS, AST->getSourceManager()); OS << "\n"; - break; - } } } diff --git a/clang-tools-extra/clang-query/Query.h b/clang-tools-extra/clang-query/Query.h index e8f4ff34bede..1f5a25db7368 100644 --- a/clang-tools-extra/clang-query/Query.h +++ b/clang-tools-extra/clang-query/Query.h @@ -10,6 +10,7 @@ #ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_QUERY_QUERY_H #define LLVM_CLANG_TOOLS_EXTRA_CLANG_QUERY_QUERY_H +#include "QuerySession.h" #include "clang/ASTMatchers/Dynamic/VariantValue.h" #include "llvm/ADT/IntrusiveRefCntPtr.h" #include "llvm/ADT/Optional.h" @@ -133,6 +134,23 @@ template <typename T> struct SetQuery : Query { T Value; }; +// Implements the exclusive 'set output dump|diag|print' options. +struct SetExclusiveOutputQuery : Query { + SetExclusiveOutputQuery(bool QuerySession::*Var) + : Query(QK_SetOutputKind), Var(Var) {} + bool run(llvm::raw_ostream &OS, QuerySession &QS) const override { + QS.DiagOutput = false; + QS.DetailedASTOutput = false; + QS.PrintOutput = false; + QS.*Var = true; + return true; + } + + static bool classof(const Query *Q) { return Q->Kind == QK_SetOutputKind; } + + bool QuerySession::*Var; +}; + } // namespace query } // namespace clang diff --git a/clang-tools-extra/clang-query/QueryParser.cpp b/clang-tools-extra/clang-query/QueryParser.cpp index eec320249458..b0dacea1004f 100644 --- a/clang-tools-extra/clang-query/QueryParser.cpp +++ b/clang-tools-extra/clang-query/QueryParser.cpp @@ -119,7 +119,17 @@ QueryRef QueryParser::parseSetOutputKind() { "expected 'diag', 'print', 'detailed-ast' or 'dump', got '" + ValStr + "'"); } - return new SetQuery<OutputKind>(&QuerySession::OutKind, OutputKind(OutKind)); + + switch (OutKind) { + case OK_DetailedAST: + return new SetExclusiveOutputQuery(&QuerySession::DetailedASTOutput); + case OK_Diag: + return new SetExclusiveOutputQuery(&QuerySession::DiagOutput); + case OK_Print: + return new SetExclusiveOutputQuery(&QuerySession::PrintOutput); + } + + llvm_unreachable("Invalid output kind"); } QueryRef QueryParser::endQuery(QueryRef Q) { diff --git a/clang-tools-extra/clang-query/QuerySession.h b/clang-tools-extra/clang-query/QuerySession.h index a211aa0f78cc..62ecb5450731 100644 --- a/clang-tools-extra/clang-query/QuerySession.h +++ b/clang-tools-extra/clang-query/QuerySession.h @@ -25,11 +25,16 @@ namespace query { class QuerySession { public: QuerySession(llvm::ArrayRef<std::unique_ptr<ASTUnit>> ASTs) - : ASTs(ASTs), OutKind(OK_Diag), BindRoot(true), PrintMatcher(false), + : ASTs(ASTs), PrintOutput(false), DiagOutput(true), + DetailedASTOutput(false), BindRoot(true), PrintMatcher(false), Terminate(false) {} llvm::ArrayRef<std::unique_ptr<ASTUnit>> ASTs; - OutputKind OutKind; + + bool PrintOutput; + bool DiagOutput; + bool DetailedASTOutput; + bool BindRoot; bool PrintMatcher; bool Terminate; |