summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/clang-query/QueryParser.cpp
diff options
context:
space:
mode:
authorStephen Kelly <steveire@gmail.com>2018-10-20 09:13:59 +0000
committerStephen Kelly <steveire@gmail.com>2018-10-20 09:13:59 +0000
commit4a5b01ddd7dd12f9a5826741e57104e8bf54748b (patch)
tree2f0ca8c7ec49a337b095c90827577c0ee9ec26d1 /clang-tools-extra/clang-query/QueryParser.cpp
parentd0e5eca0fdd54ca9dc896843781abb46656c17be (diff)
downloadbcm5719-llvm-4a5b01ddd7dd12f9a5826741e57104e8bf54748b.tar.gz
bcm5719-llvm-4a5b01ddd7dd12f9a5826741e57104e8bf54748b.zip
[clang-query] Add option to print matcher expression
Summary: This is useful if using clang-query -f with a file containing multiple matchers. Reviewers: aaron.ballman Subscribers: cfe-commits Differential Revision: https://reviews.llvm.org/D52859 llvm-svn: 344840
Diffstat (limited to 'clang-tools-extra/clang-query/QueryParser.cpp')
-rw-r--r--clang-tools-extra/clang-query/QueryParser.cpp26
1 files changed, 18 insertions, 8 deletions
diff --git a/clang-tools-extra/clang-query/QueryParser.cpp b/clang-tools-extra/clang-query/QueryParser.cpp
index 55504f70c2b..e7312d8d58d 100644
--- a/clang-tools-extra/clang-query/QueryParser.cpp
+++ b/clang-tools-extra/clang-query/QueryParser.cpp
@@ -142,7 +142,12 @@ enum ParsedQueryKind {
PQK_Quit
};
-enum ParsedQueryVariable { PQV_Invalid, PQV_Output, PQV_BindRoot };
+enum ParsedQueryVariable {
+ PQV_Invalid,
+ PQV_Output,
+ PQV_BindRoot,
+ PQV_PrintMatcher
+};
QueryRef makeInvalidQueryFromDiagnostics(const Diagnostics &Diag) {
std::string ErrStr;
@@ -214,21 +219,23 @@ QueryRef QueryParser::doParse() {
return completeMatcherExpression();
Diagnostics Diag;
+ auto MatcherSource = StringRef(Begin, End - Begin).trim();
Optional<DynTypedMatcher> Matcher = Parser::parseMatcherExpression(
- StringRef(Begin, End - Begin), nullptr, &QS.NamedValues, &Diag);
+ MatcherSource, nullptr, &QS.NamedValues, &Diag);
if (!Matcher) {
return makeInvalidQueryFromDiagnostics(Diag);
}
- return new MatchQuery(*Matcher);
+ return new MatchQuery(MatcherSource, *Matcher);
}
case PQK_Set: {
StringRef VarStr;
- ParsedQueryVariable Var = LexOrCompleteWord<ParsedQueryVariable>(this,
- VarStr)
- .Case("output", PQV_Output)
- .Case("bind-root", PQV_BindRoot)
- .Default(PQV_Invalid);
+ ParsedQueryVariable Var =
+ LexOrCompleteWord<ParsedQueryVariable>(this, VarStr)
+ .Case("output", PQV_Output)
+ .Case("bind-root", PQV_BindRoot)
+ .Case("print-matcher", PQV_PrintMatcher)
+ .Default(PQV_Invalid);
if (VarStr.empty())
return new InvalidQuery("expected variable name");
if (Var == PQV_Invalid)
@@ -242,6 +249,9 @@ QueryRef QueryParser::doParse() {
case PQV_BindRoot:
Q = parseSetBool(&QuerySession::BindRoot);
break;
+ case PQV_PrintMatcher:
+ Q = parseSetBool(&QuerySession::PrintMatcher);
+ break;
case PQV_Invalid:
llvm_unreachable("Invalid query kind");
}
OpenPOWER on IntegriCloud