diff options
author | Douglas Gregor <dgregor@apple.com> | 2011-02-17 08:47:29 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2011-02-17 08:47:29 +0000 |
commit | 133edddd829db2488f6b487c5b3c2e48d69576db (patch) | |
tree | c8f0d0777aee5d31ada97906179553462988a857 /clang/lib | |
parent | 712563bba42c69f924739768832d1a23c71c95d5 (diff) | |
download | bcm5719-llvm-133edddd829db2488f6b487c5b3c2e48d69576db.tar.gz bcm5719-llvm-133edddd829db2488f6b487c5b3c2e48d69576db.zip |
Devirtualize Decl::getNextRedeclaration().
llvm-svn: 125740
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/AST/DeclBase.cpp | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/clang/lib/AST/DeclBase.cpp b/clang/lib/AST/DeclBase.cpp index 5a117ebbf2f..437089a415f 100644 --- a/clang/lib/AST/DeclBase.cpp +++ b/clang/lib/AST/DeclBase.cpp @@ -191,6 +191,78 @@ Decl *Decl::getCanonicalDecl() { return this; } +Decl *Decl::getNextRedeclaration() { + switch (getKind()) { + case Var: + return static_cast<VarDecl *>(this)->getNextRedeclaration(); + + case Function: + case CXXMethod: + case CXXConstructor: + case CXXDestructor: + case CXXConversion: + return static_cast<FunctionDecl *>(this)->getNextRedeclaration(); + + case Typedef: + return static_cast<TypedefDecl *>(this)->getNextRedeclaration(); + + case Enum: + case Record: + case CXXRecord: + case ClassTemplateSpecialization: + case ClassTemplatePartialSpecialization: + return static_cast<TagDecl *>(this)->getNextRedeclaration(); + + case ObjCMethod: + return static_cast<ObjCMethodDecl *>(this)->getNextRedeclaration(); + + case FunctionTemplate: + case ClassTemplate: + return static_cast<RedeclarableTemplateDecl *>(this) + ->getNextRedeclaration(); + + case Namespace: + case UsingDirective: + case NamespaceAlias: + case Label: + case UnresolvedUsingTypename: + case TemplateTypeParm: + case EnumConstant: + case UnresolvedUsingValue: + case IndirectField: + case Field: + case ObjCIvar: + case ObjCAtDefsField: + case ImplicitParam: + case ParmVar: + case NonTypeTemplateParm: + case TemplateTemplateParm: + case Using: + case UsingShadow: + case ObjCCategory: + case ObjCProtocol: + case ObjCInterface: + case ObjCCategoryImpl: + case ObjCImplementation: + case ObjCProperty: + case ObjCCompatibleAlias: + case LinkageSpec: + case ObjCPropertyImpl: + case ObjCForwardProtocol: + case ObjCClass: + case FileScopeAsm: + case AccessSpec: + case Friend: + case FriendTemplate: + case StaticAssert: + case Block: + case TranslationUnit: + return this; + } + + return this; +} + //===----------------------------------------------------------------------===// // PrettyStackTraceDecl Implementation //===----------------------------------------------------------------------===// |