diff options
Diffstat (limited to 'clang-tools-extra/clang-query/QueryParser.cpp')
-rw-r--r-- | clang-tools-extra/clang-query/QueryParser.cpp | 26 |
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"); } |