summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
authorAlp Toker <alp@nuanti.com>2014-06-06 15:05:09 +0000
committerAlp Toker <alp@nuanti.com>2014-06-06 15:05:09 +0000
commit62438dab83a3dc4eccedf8158d87b8da34304cfd (patch)
tree200d10f0b420a20973c68fa2be4dd6969627e6f9 /clang
parent8bbb8446f38c3043af5e2428f4a09e3b8d0f3de2 (diff)
downloadbcm5719-llvm-62438dab83a3dc4eccedf8158d87b8da34304cfd.tar.gz
bcm5719-llvm-62438dab83a3dc4eccedf8158d87b8da34304cfd.zip
Fix RecursiveASTVisitor to visit types in ObjCPropertyDecl
Patch by Mathieu Baudet! llvm-svn: 210339
Diffstat (limited to 'clang')
-rw-r--r--clang/include/clang/AST/DataRecursiveASTVisitor.h9
-rw-r--r--clang/include/clang/AST/RecursiveASTVisitor.h9
-rw-r--r--clang/unittests/Tooling/RecursiveASTVisitorTest.cpp9
-rw-r--r--clang/unittests/Tooling/TestVisitor.h3
4 files changed, 25 insertions, 5 deletions
diff --git a/clang/include/clang/AST/DataRecursiveASTVisitor.h b/clang/include/clang/AST/DataRecursiveASTVisitor.h
index 829f6c9c77e..acee4457c5b 100644
--- a/clang/include/clang/AST/DataRecursiveASTVisitor.h
+++ b/clang/include/clang/AST/DataRecursiveASTVisitor.h
@@ -1322,8 +1322,13 @@ DEF_TRAVERSE_DECL(ObjCMethodDecl, {
return true;
})
-DEF_TRAVERSE_DECL(ObjCPropertyDecl, {// FIXME: implement
- })
+DEF_TRAVERSE_DECL(ObjCPropertyDecl, {
+ if (D->getTypeSourceInfo())
+ TRY_TO(TraverseTypeLoc(D->getTypeSourceInfo()->getTypeLoc()));
+ else
+ TRY_TO(TraverseType(D->getType()));
+ return true;
+})
DEF_TRAVERSE_DECL(UsingDecl, {
TRY_TO(TraverseNestedNameSpecifierLoc(D->getQualifierLoc()));
diff --git a/clang/include/clang/AST/RecursiveASTVisitor.h b/clang/include/clang/AST/RecursiveASTVisitor.h
index 1fee8a98c8d..12664d0ce87 100644
--- a/clang/include/clang/AST/RecursiveASTVisitor.h
+++ b/clang/include/clang/AST/RecursiveASTVisitor.h
@@ -1394,8 +1394,13 @@ DEF_TRAVERSE_DECL(ObjCMethodDecl, {
return true;
})
-DEF_TRAVERSE_DECL(ObjCPropertyDecl, {// FIXME: implement
- })
+DEF_TRAVERSE_DECL(ObjCPropertyDecl, {
+ if (D->getTypeSourceInfo())
+ TRY_TO(TraverseTypeLoc(D->getTypeSourceInfo()->getTypeLoc()));
+ else
+ TRY_TO(TraverseType(D->getType()));
+ return true;
+})
DEF_TRAVERSE_DECL(UsingDecl, {
TRY_TO(TraverseNestedNameSpecifierLoc(D->getQualifierLoc()));
diff --git a/clang/unittests/Tooling/RecursiveASTVisitorTest.cpp b/clang/unittests/Tooling/RecursiveASTVisitorTest.cpp
index 837a15fa887..6be734e6d4b 100644
--- a/clang/unittests/Tooling/RecursiveASTVisitorTest.cpp
+++ b/clang/unittests/Tooling/RecursiveASTVisitorTest.cpp
@@ -531,6 +531,15 @@ TEST(RecursiveASTVisitor, VisitsCompoundLiteralType) {
TypeLocVisitor::Lang_C));
}
+TEST(RecursiveASTVisitor, VisitsObjCPropertyType) {
+ TypeLocVisitor Visitor;
+ Visitor.ExpectMatch("NSNumber", 2, 33);
+ EXPECT_TRUE(Visitor.runOver(
+ "@class NSNumber; \n"
+ "@interface A @property (retain) NSNumber *x; @end\n",
+ TypeLocVisitor::Lang_OBJC));
+}
+
TEST(RecursiveASTVisitor, VisitsLambdaExpr) {
LambdaExprVisitor Visitor;
Visitor.ExpectMatch("", 1, 12);
diff --git a/clang/unittests/Tooling/TestVisitor.h b/clang/unittests/Tooling/TestVisitor.h
index ec751c350e0..2e64032cf40 100644
--- a/clang/unittests/Tooling/TestVisitor.h
+++ b/clang/unittests/Tooling/TestVisitor.h
@@ -39,7 +39,7 @@ public:
virtual ~TestVisitor() { }
- enum Language { Lang_C, Lang_CXX98, Lang_CXX11, Lang_CXX=Lang_CXX98 };
+ enum Language { Lang_C, Lang_CXX98, Lang_CXX11, Lang_OBJC, Lang_CXX=Lang_CXX98 };
/// \brief Runs the current AST visitor over the given code.
bool runOver(StringRef Code, Language L = Lang_CXX) {
@@ -48,6 +48,7 @@ public:
case Lang_C: Args.push_back("-std=c99"); break;
case Lang_CXX98: Args.push_back("-std=c++98"); break;
case Lang_CXX11: Args.push_back("-std=c++11"); break;
+ case Lang_OBJC: Args.push_back("-ObjC"); break;
}
return tooling::runToolOnCodeWithArgs(CreateTestAction(), Code, Args);
}
OpenPOWER on IntegriCloud