summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra
diff options
context:
space:
mode:
authorAaron Ballman <aaron@aaronballman.com>2015-08-06 11:56:57 +0000
committerAaron Ballman <aaron@aaronballman.com>2015-08-06 11:56:57 +0000
commit5890717e7098489ff953a9f96d429a8a02477b2d (patch)
treedd497d4431a13be9e03b21d77859a4a20c3a6beb /clang-tools-extra
parenta02ac60469be8bd488becde081d059dfc6081515 (diff)
downloadbcm5719-llvm-5890717e7098489ff953a9f96d429a8a02477b2d.tar.gz
bcm5719-llvm-5890717e7098489ff953a9f96d429a8a02477b2d.zip
Add the "quit" command as a way to terminate clang-query interactive sessions.
llvm-svn: 244206
Diffstat (limited to 'clang-tools-extra')
-rw-r--r--clang-tools-extra/clang-query/Query.cpp9
-rw-r--r--clang-tools-extra/clang-query/Query.h9
-rw-r--r--clang-tools-extra/clang-query/QueryParser.cpp5
-rw-r--r--clang-tools-extra/clang-query/QuerySession.h3
-rw-r--r--clang-tools-extra/clang-query/tool/ClangQuery.cpp2
5 files changed, 26 insertions, 2 deletions
diff --git a/clang-tools-extra/clang-query/Query.cpp b/clang-tools-extra/clang-query/Query.cpp
index d5d755157df..74eb6ea44a8 100644
--- a/clang-tools-extra/clang-query/Query.cpp
+++ b/clang-tools-extra/clang-query/Query.cpp
@@ -44,7 +44,14 @@ bool HelpQuery::run(llvm::raw_ostream &OS, QuerySession &QS) const {
" set output (diag|print|dump) "
"Set whether to print bindings as diagnostics,\n"
" "
- "AST pretty prints or AST dumps.\n\n";
+ "AST pretty prints or AST dumps.\n"
+ " quit "
+ "Terminates the query session.\n\n";
+ return true;
+}
+
+bool QuitQuery::run(llvm::raw_ostream &OS, QuerySession &QS) const {
+ QS.Terminate = true;
return true;
}
diff --git a/clang-tools-extra/clang-query/Query.h b/clang-tools-extra/clang-query/Query.h
index f45057016d4..109336a9ddc 100644
--- a/clang-tools-extra/clang-query/Query.h
+++ b/clang-tools-extra/clang-query/Query.h
@@ -32,6 +32,7 @@ enum QueryKind {
QK_Match,
QK_SetBool,
QK_SetOutputKind,
+ QK_Quit
};
class QuerySession;
@@ -76,6 +77,14 @@ struct HelpQuery : Query {
static bool classof(const Query *Q) { return Q->Kind == QK_Help; }
};
+/// Query for "quit".
+struct QuitQuery : Query {
+ QuitQuery() : Query(QK_Quit) {}
+ bool run(llvm::raw_ostream &OS, QuerySession &QS) const override;
+
+ static bool classof(const Query *Q) { return Q->Kind == QK_Quit; }
+};
+
/// Query for "match MATCHER".
struct MatchQuery : Query {
MatchQuery(const ast_matchers::dynamic::DynTypedMatcher &Matcher)
diff --git a/clang-tools-extra/clang-query/QueryParser.cpp b/clang-tools-extra/clang-query/QueryParser.cpp
index 7df7dd2844b..e25b69700b0 100644
--- a/clang-tools-extra/clang-query/QueryParser.cpp
+++ b/clang-tools-extra/clang-query/QueryParser.cpp
@@ -142,6 +142,7 @@ enum ParsedQueryKind {
PQK_Match,
PQK_Set,
PQK_Unlet,
+ PQK_Quit
};
enum ParsedQueryVariable {
@@ -181,6 +182,7 @@ QueryRef QueryParser::doParse() {
.Case("match", PQK_Match)
.Case("set", PQK_Set)
.Case("unlet", PQK_Unlet)
+ .Case("quit", PQK_Quit)
.Default(PQK_Invalid);
switch (QKind) {
@@ -190,6 +192,9 @@ QueryRef QueryParser::doParse() {
case PQK_Help:
return endQuery(new HelpQuery);
+ case PQK_Quit:
+ return endQuery(new QuitQuery);
+
case PQK_Let: {
StringRef Name = lexWord();
diff --git a/clang-tools-extra/clang-query/QuerySession.h b/clang-tools-extra/clang-query/QuerySession.h
index e6a26acd251..162289f8c3a 100644
--- a/clang-tools-extra/clang-query/QuerySession.h
+++ b/clang-tools-extra/clang-query/QuerySession.h
@@ -25,11 +25,12 @@ namespace query {
class QuerySession {
public:
QuerySession(llvm::ArrayRef<std::unique_ptr<ASTUnit>> ASTs)
- : ASTs(ASTs), OutKind(OK_Diag), BindRoot(true) {}
+ : ASTs(ASTs), OutKind(OK_Diag), BindRoot(true), Terminate(false) {}
llvm::ArrayRef<std::unique_ptr<ASTUnit>> ASTs;
OutputKind OutKind;
bool BindRoot;
+ bool Terminate;
llvm::StringMap<ast_matchers::dynamic::VariantValue> NamedValues;
};
diff --git a/clang-tools-extra/clang-query/tool/ClangQuery.cpp b/clang-tools-extra/clang-query/tool/ClangQuery.cpp
index df7190d4013..f1c97ce423b 100644
--- a/clang-tools-extra/clang-query/tool/ClangQuery.cpp
+++ b/clang-tools-extra/clang-query/tool/ClangQuery.cpp
@@ -111,6 +111,8 @@ int main(int argc, const char **argv) {
QueryRef Q = QueryParser::parse(*Line, QS);
Q->run(llvm::outs(), QS);
llvm::outs().flush();
+ if (QS.Terminate)
+ break;
}
}
OpenPOWER on IntegriCloud