diff options
| author | Alp Toker <alp@nuanti.com> | 2014-06-06 15:05:09 +0000 |
|---|---|---|
| committer | Alp Toker <alp@nuanti.com> | 2014-06-06 15:05:09 +0000 |
| commit | 62438dab83a3dc4eccedf8158d87b8da34304cfd (patch) | |
| tree | 200d10f0b420a20973c68fa2be4dd6969627e6f9 /clang | |
| parent | 8bbb8446f38c3043af5e2428f4a09e3b8d0f3de2 (diff) | |
| download | bcm5719-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.h | 9 | ||||
| -rw-r--r-- | clang/include/clang/AST/RecursiveASTVisitor.h | 9 | ||||
| -rw-r--r-- | clang/unittests/Tooling/RecursiveASTVisitorTest.cpp | 9 | ||||
| -rw-r--r-- | clang/unittests/Tooling/TestVisitor.h | 3 |
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); } |

