Add new 'let' command to bind arbitrary values into constants.
Summary:
Add new 'let' command to bind arbitrary values into constants.
These constants can then be used in the matcher expressions.
Reviewers: pcc
CC: cfe-commits
Differential Revision: http://reviews.llvm.org/D3383
llvm-svn: 206984
diff --git a/clang-tools-extra/clang-query/Query.h b/clang-tools-extra/clang-query/Query.h
index 60514f7..f450570 100644
--- a/clang-tools-extra/clang-query/Query.h
+++ b/clang-tools-extra/clang-query/Query.h
@@ -28,9 +28,10 @@
QK_Invalid,
QK_NoOp,
QK_Help,
+ QK_Let,
QK_Match,
QK_SetBool,
- QK_SetOutputKind
+ QK_SetOutputKind,
};
class QuerySession;
@@ -86,6 +87,17 @@
static bool classof(const Query *Q) { return Q->Kind == QK_Match; }
};
+struct LetQuery : Query {
+ LetQuery(StringRef Name, const ast_matchers::dynamic::VariantValue &Value)
+ : Query(QK_Let), Name(Name), Value(Value) {}
+ bool run(llvm::raw_ostream &OS, QuerySession &QS) const override;
+
+ std::string Name;
+ ast_matchers::dynamic::VariantValue Value;
+
+ static bool classof(const Query *Q) { return Q->Kind == QK_Let; }
+};
+
template <typename T> struct SetQueryKind {};
template <> struct SetQueryKind<bool> {