summaryrefslogtreecommitdiffstats
path: root/clang/lib/ASTMatchers/Dynamic
diff options
context:
space:
mode:
authorManuel Klimek <klimek@google.com>2014-08-25 11:23:50 +0000
committerManuel Klimek <klimek@google.com>2014-08-25 11:23:50 +0000
commit3fe8a38110ee54efe04c3a66c677c67fb619f645 (patch)
treecbac75bd4d175a295a59863852e9d3c451d686a9 /clang/lib/ASTMatchers/Dynamic
parent4b3ba214d06d5681894d1f481a7bb1f5cc6a597e (diff)
downloadbcm5719-llvm-3fe8a38110ee54efe04c3a66c677c67fb619f645.tar.gz
bcm5719-llvm-3fe8a38110ee54efe04c3a66c677c67fb619f645.zip
Add hasAttr matcher for declarations.
Delete special-case CUDA attribute matchers. Patch by Jacques Pienaar. llvm-svn: 216379
Diffstat (limited to 'clang/lib/ASTMatchers/Dynamic')
-rw-r--r--clang/lib/ASTMatchers/Dynamic/Marshallers.h21
-rw-r--r--clang/lib/ASTMatchers/Dynamic/Registry.cpp4
2 files changed, 22 insertions, 3 deletions
diff --git a/clang/lib/ASTMatchers/Dynamic/Marshallers.h b/clang/lib/ASTMatchers/Dynamic/Marshallers.h
index 96438005ce5..0bae3ada5a0 100644
--- a/clang/lib/ASTMatchers/Dynamic/Marshallers.h
+++ b/clang/lib/ASTMatchers/Dynamic/Marshallers.h
@@ -76,6 +76,27 @@ template <> struct ArgTypeTraits<unsigned> {
}
};
+template <> struct ArgTypeTraits<attr::Kind> {
+private:
+ static attr::Kind getAttrKind(llvm::StringRef AttrKind) {
+ return llvm::StringSwitch<attr::Kind>(AttrKind)
+#define ATTR(X) .Case("attr::" #X, attr:: X)
+#include "clang/Basic/AttrList.inc"
+ .Default(attr::Kind(-1));
+ }
+public:
+ static bool is(const VariantValue &Value) {
+ return Value.isString() &&
+ getAttrKind(Value.getString()) != attr::Kind(-1);
+ }
+ static attr::Kind get(const VariantValue &Value) {
+ return getAttrKind(Value.getString());
+ }
+ static ArgKind getKind() {
+ return ArgKind(ArgKind::AK_String);
+ }
+};
+
/// \brief Matcher descriptor interface.
///
/// Provides a \c create() method that constructs the matcher from the provided
diff --git a/clang/lib/ASTMatchers/Dynamic/Registry.cpp b/clang/lib/ASTMatchers/Dynamic/Registry.cpp
index ed95073397b..8d580214279 100644
--- a/clang/lib/ASTMatchers/Dynamic/Registry.cpp
+++ b/clang/lib/ASTMatchers/Dynamic/Registry.cpp
@@ -176,15 +176,13 @@ RegistryMaps::RegistryMaps() {
REGISTER_MATCHER(hasAnyUsingShadowDecl);
REGISTER_MATCHER(hasArgument);
REGISTER_MATCHER(hasArgumentOfType);
+ REGISTER_MATCHER(hasAttr);
REGISTER_MATCHER(hasBase);
REGISTER_MATCHER(hasBody);
REGISTER_MATCHER(hasCanonicalType);
REGISTER_MATCHER(hasCaseConstant);
REGISTER_MATCHER(hasCondition);
REGISTER_MATCHER(hasConditionVariableStatement);
- REGISTER_MATCHER(hasCudaDeviceAttr);
- REGISTER_MATCHER(hasCudaGlobalAttr);
- REGISTER_MATCHER(hasCudaHostAttr);
REGISTER_MATCHER(hasDeclContext);
REGISTER_MATCHER(hasDeclaration);
REGISTER_MATCHER(hasDeducedType);
OpenPOWER on IntegriCloud