aboutsummaryrefslogtreecommitdiff
path: root/Driver
diff options
context:
space:
mode:
Diffstat (limited to 'Driver')
-rw-r--r--Driver/ASTConsumers.cpp12
-rw-r--r--Driver/RewriteTest.cpp35
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";
}