diff options
Diffstat (limited to 'Driver')
-rw-r--r-- | Driver/ASTConsumers.cpp | 12 | ||||
-rw-r--r-- | Driver/RewriteTest.cpp | 35 |
2 files changed, 25 insertions, 22 deletions
diff --git a/Driver/ASTConsumers.cpp b/Driver/ASTConsumers.cpp index 22863411b1..790baf5a70 100644 --- a/Driver/ASTConsumers.cpp +++ b/Driver/ASTConsumers.cpp @@ -172,14 +172,12 @@ void DeclPrinter::PrintObjcInterfaceDecl(ObjcInterfaceDecl *OID) { else Out << '\n'; - int NumIvars = OID->getNumInstanceVariables(); - if (NumIvars > 0) { - ObjcIvarDecl **Ivars = OID->getInstanceVariables(); + if (OID->getNumInstanceVariables() > 0) { Out << '{'; - for (int i = 0; i < NumIvars; i++) { - Out << '\t' << Ivars[i]->getType().getAsString() - << ' ' << Ivars[i]->getName() - << ";\n"; + for (ObjcInterfaceDecl::ivar_iterator I = OID->ivar_begin(), + E = OID->ivar_end(); I != E; ++I) { + Out << '\t' << (*I)->getType().getAsString() + << ' ' << (*I)->getName() << ";\n"; } Out << "}\n"; } diff --git a/Driver/RewriteTest.cpp b/Driver/RewriteTest.cpp index c8c8f9dd3e..6edfcb17d7 100644 --- a/Driver/RewriteTest.cpp +++ b/Driver/RewriteTest.cpp @@ -2090,10 +2090,6 @@ void RewriteTest::RewriteObjcClassMetaData(ObjcImplementationDecl *IDecl, std::string &Result) { ObjcInterfaceDecl *CDecl = IDecl->getClassInterface(); - // Build _objc_ivar_list metadata for classes ivars if needed - int NumIvars = IDecl->getImplDeclNumIvars() > 0 - ? IDecl->getImplDeclNumIvars() - : (CDecl ? CDecl->getNumInstanceVariables() : 0); // Explictly declared @interface's are already synthesized. if (CDecl->ImplicitInterfaceDecl()) { // FIXME: Implementation of a class with no @interface (legacy) doese not @@ -2101,6 +2097,10 @@ void RewriteTest::RewriteObjcClassMetaData(ObjcImplementationDecl *IDecl, SynthesizeObjcInternalStruct(CDecl, Result); } + // Build _objc_ivar_list metadata for classes ivars if needed + int NumIvars = IDecl->getImplDeclNumIvars() > 0 + ? IDecl->getImplDeclNumIvars() + : (CDecl ? CDecl->getNumInstanceVariables() : 0); if (NumIvars > 0) { static bool objc_ivar = false; if (!objc_ivar) { @@ -2133,28 +2133,33 @@ void RewriteTest::RewriteObjcClassMetaData(ObjcImplementationDecl *IDecl, "{\n\t"; Result += utostr(NumIvars); Result += "\n"; - - ObjcIvarDecl **Ivars = IDecl->getImplDeclIVars() - ? IDecl->getImplDeclIVars() - : CDecl->getInstanceVariables(); + + ObjcInterfaceDecl::ivar_iterator IVI, IVE; + if (IDecl->getImplDeclNumIvars() > 0) { + IVI = IDecl->ivar_begin(); + IVE = IDecl->ivar_end(); + } else { + IVI = CDecl->ivar_begin(); + IVE = CDecl->ivar_end(); + } Result += "\t,{{\""; - Result += Ivars[0]->getName(); + Result += (*IVI)->getName(); Result += "\", \""; std::string StrEncoding; - Context->getObjcEncodingForType(Ivars[0]->getType(), StrEncoding); + Context->getObjcEncodingForType((*IVI)->getType(), StrEncoding); Result += StrEncoding; Result += "\", "; - SynthesizeIvarOffsetComputation(IDecl, Ivars[0], Result); + SynthesizeIvarOffsetComputation(IDecl, *IVI, Result); Result += "}\n"; - for (int i = 1; i < NumIvars; i++) { + for (++IVI; IVI != IVE; ++IVI) { Result += "\t ,{\""; - Result += Ivars[i]->getName(); + Result += (*IVI)->getName(); Result += "\", \""; std::string StrEncoding; - Context->getObjcEncodingForType(Ivars[i]->getType(), StrEncoding); + Context->getObjcEncodingForType((*IVI)->getType(), StrEncoding); Result += StrEncoding; Result += "\", "; - SynthesizeIvarOffsetComputation(IDecl, Ivars[i], Result); + SynthesizeIvarOffsetComputation(IDecl, (*IVI), Result); Result += "}\n"; } |