/// all_declared_ivar_begin - return first ivar declared in this class, /// its extensions and its implementation. Lazily build the list on first /// access. 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 (!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 (const ObjCCategoryDecl *CDecl = getFirstClassExtension(); CDecl; CDecl = CDecl->getNextClassExtension()) { if (!CDecl->ivar_empty()) { ObjCCategoryDecl::ivar_iterator I = CDecl->ivar_begin(), E = CDecl->ivar_end(); if (!data().IvarList) { data().IvarList = &*I; ++I; curIvar = data().IvarList; } for ( ;I != E; curIvar = &*I, ++I) curIvar->setNextIvar(&*I); } } if (ObjCImplementationDecl *ImplDecl = getImplementation()) { if (!ImplDecl->ivar_empty()) { ObjCImplementationDecl::ivar_iterator I = ImplDecl->ivar_begin(), E = ImplDecl->ivar_end(); if (!data().IvarList) { data().IvarList = &*I; ++I; curIvar = data().IvarList; } for ( ;I != E; curIvar = &*I, ++I) curIvar->setNextIvar(&*I); } } return data().IvarList; }
/// all_declared_ivar_begin - return first ivar declared in this class, /// its extensions and its implementation. Lazily build the list on first /// access. ObjCIvarDecl *ObjCInterfaceDecl::all_declared_ivar_begin() { if (IvarList) return IvarList; ObjCIvarDecl *curIvar = 0; if (!ivar_empty()) { ObjCInterfaceDecl::ivar_iterator I = ivar_begin(), E = ivar_end(); IvarList = (*I); ++I; for (curIvar = IvarList; I != E; curIvar = *I, ++I) curIvar->setNextIvar(*I); } for (const ObjCCategoryDecl *CDecl = getFirstClassExtension(); CDecl; CDecl = CDecl->getNextClassExtension()) { if (!CDecl->ivar_empty()) { ObjCCategoryDecl::ivar_iterator I = CDecl->ivar_begin(), E = CDecl->ivar_end(); if (!IvarList) { IvarList = (*I); ++I; curIvar = IvarList; } for ( ;I != E; curIvar = *I, ++I) curIvar->setNextIvar(*I); } } if (ObjCImplementationDecl *ImplDecl = getImplementation()) { if (!ImplDecl->ivar_empty()) { ObjCImplementationDecl::ivar_iterator I = ImplDecl->ivar_begin(), E = ImplDecl->ivar_end(); if (!IvarList) { IvarList = (*I); ++I; curIvar = IvarList; } for ( ;I != E; curIvar = *I, ++I) curIvar->setNextIvar(*I); } } return IvarList; }