From 467c0b165072689ef87fe8d9cd47a5b63485bcdc Mon Sep 17 00:00:00 2001 From: Argyrios Kyrtzidis Date: Sat, 25 Jul 2009 22:15:22 +0000 Subject: [PATCH] Refactor ObjCContainerDecl::getInstanceMethod/getClassMethod into one ObjCContainerDecl::getMethod. Avoids code duplication. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@77091 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/AST/DeclObjC.h | 13 +++++++------ lib/AST/DeclObjC.cpp | 26 +++----------------------- 2 files changed, 10 insertions(+), 29 deletions(-) diff --git a/include/clang/AST/DeclObjC.h b/include/clang/AST/DeclObjC.h index 91c5c87269..5fad478383 100644 --- a/include/clang/AST/DeclObjC.h +++ b/include/clang/AST/DeclObjC.h @@ -333,13 +333,14 @@ public: } // Get the local instance/class method declared in this interface. - ObjCMethodDecl *getInstanceMethod(Selector Sel) const; - ObjCMethodDecl *getClassMethod(Selector Sel) const; - ObjCIvarDecl *getIvarDecl(IdentifierInfo *Id) const; - - ObjCMethodDecl *getMethod(Selector Sel, bool isInstance) const { - return isInstance ? getInstanceMethod(Sel) : getClassMethod(Sel); + ObjCMethodDecl *getMethod(Selector Sel, bool isInstance) const; + ObjCMethodDecl *getInstanceMethod(Selector Sel) const { + return getMethod(Sel, true/*isInstance*/); + } + ObjCMethodDecl *getClassMethod(Selector Sel) const { + return getMethod(Sel, false/*isInstance*/); } + ObjCIvarDecl *getIvarDecl(IdentifierInfo *Id) const; ObjCPropertyDecl *FindPropertyDeclaration(IdentifierInfo *PropertyId) const; diff --git a/lib/AST/DeclObjC.cpp b/lib/AST/DeclObjC.cpp index e8b6ef5ccc..d5181f75b5 100644 --- a/lib/AST/DeclObjC.cpp +++ b/lib/AST/DeclObjC.cpp @@ -54,9 +54,9 @@ ObjCContainerDecl::getIvarDecl(IdentifierInfo *Id) const { return 0; } -// Get the local instance method declared in this interface. +// Get the local instance/class method declared in this interface. ObjCMethodDecl * -ObjCContainerDecl::getInstanceMethod(Selector Sel) const { +ObjCContainerDecl::getMethod(Selector Sel, bool isInstance) const { // Since instance & class methods can have the same name, the loop below // ensures we get the correct method. // @@ -68,27 +68,7 @@ ObjCContainerDecl::getInstanceMethod(Selector Sel) const { lookup_const_iterator Meth, MethEnd; for (llvm::tie(Meth, MethEnd) = lookup(Sel); Meth != MethEnd; ++Meth) { ObjCMethodDecl *MD = dyn_cast(*Meth); - if (MD && MD->isInstanceMethod()) - return MD; - } - return 0; -} - -// Get the local class method declared in this interface. -ObjCMethodDecl * -ObjCContainerDecl::getClassMethod(Selector Sel) const { - // Since instance & class methods can have the same name, the loop below - // ensures we get the correct method. - // - // @interface Whatever - // - (int) class_method; - // + (float) class_method; - // @end - // - lookup_const_iterator Meth, MethEnd; - for (llvm::tie(Meth, MethEnd) = lookup(Sel); Meth != MethEnd; ++Meth) { - ObjCMethodDecl *MD = dyn_cast(*Meth); - if (MD && MD->isClassMethod()) + if (MD && MD->isInstanceMethod() == isInstance) return MD; } return 0; -- 2.40.0