diff options
author | Adrian Prantl <aprantl@apple.com> | 2013-02-27 01:31:55 +0000 |
---|---|---|
committer | Adrian Prantl <aprantl@apple.com> | 2013-02-27 01:31:55 +0000 |
commit | 10b4df7ff21076c21ca764f8ca38ccaff7888f25 (patch) | |
tree | 24ab636cfafd0221097c00478c22607dc3e36a22 /lib/AST/DeclObjC.cpp | |
parent | b7a3f74bbb02788ad1b597fe3897db2d8a4fed43 (diff) |
Temporarily revert r176116 for compile-time performance regression.
This reverts commit ea95e4587fd13606fbf63b10a07a7d02026aa39c.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@176151 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/AST/DeclObjC.cpp')
-rw-r--r-- | lib/AST/DeclObjC.cpp | 53 |
1 files changed, 20 insertions, 33 deletions
diff --git a/lib/AST/DeclObjC.cpp b/lib/AST/DeclObjC.cpp index d1bf9a9e45..d539e0098f 100644 --- a/lib/AST/DeclObjC.cpp +++ b/lib/AST/DeclObjC.cpp @@ -1093,51 +1093,38 @@ namespace { /// all_declared_ivar_begin - return first ivar declared in this class, /// its extensions and its implementation. Lazily build the list on first /// access. -/// -/// Caveat: The list returned by this method reflects the current -/// state of the parser. The cache will be updated for every ivar -/// added by an extension or the implementation when they are -/// encountered. -/// See also ObjCIvarDecl::Create(). ObjCIvarDecl *ObjCInterfaceDecl::all_declared_ivar_begin() { // FIXME: Should make sure no callers ever do this. if (!hasDefinition()) return 0; + if (data().IvarList) + return data().IvarList; + ObjCIvarDecl *curIvar = 0; - if (!data().IvarList) { - if (!ivar_empty()) { - ObjCInterfaceDecl::ivar_iterator I = ivar_begin(), E = ivar_end(); - data().IvarList = *I; ++I; - for (curIvar = data().IvarList; I != E; curIvar = *I, ++I) - curIvar->setNextIvar(*I); - } + if (!ivar_empty()) { + ObjCInterfaceDecl::ivar_iterator I = ivar_begin(), E = ivar_end(); + data().IvarList = *I; ++I; + for (curIvar = data().IvarList; I != E; curIvar = *I, ++I) + curIvar->setNextIvar(*I); + } - for (ObjCInterfaceDecl::known_extensions_iterator - Ext = known_extensions_begin(), - ExtEnd = known_extensions_end(); - Ext != ExtEnd; ++Ext) { - if (!Ext->ivar_empty()) { - ObjCCategoryDecl::ivar_iterator - I = Ext->ivar_begin(), - E = Ext->ivar_end(); - if (!data().IvarList) { - data().IvarList = *I; ++I; - curIvar = data().IvarList; - } - for ( ;I != E; curIvar = *I, ++I) - curIvar->setNextIvar(*I); + for (ObjCInterfaceDecl::known_extensions_iterator + Ext = known_extensions_begin(), + ExtEnd = known_extensions_end(); + Ext != ExtEnd; ++Ext) { + if (!Ext->ivar_empty()) { + ObjCCategoryDecl::ivar_iterator I = Ext->ivar_begin(),E = Ext->ivar_end(); + if (!data().IvarList) { + data().IvarList = *I; ++I; + curIvar = data().IvarList; } + for ( ;I != E; curIvar = *I, ++I) + curIvar->setNextIvar(*I); } - data().IvarListMissingImplementation = true; } - - // cached and complete! - if (!data().IvarListMissingImplementation) - return data().IvarList; if (ObjCImplementationDecl *ImplDecl = getImplementation()) { - data().IvarListMissingImplementation = false; if (!ImplDecl->ivar_empty()) { SmallVector<SynthesizeIvarChunk, 16> layout; for (ObjCImplementationDecl::ivar_iterator I = ImplDecl->ivar_begin(), |