delete[] ParamInfo;
}
+/// ObjcAddInstanceVariablesToClass - Inserts instance variables
+/// into ObjcInterfaceDecl's fields.
+///
+void ObjcInterfaceDecl::ObjcAddInstanceVariablesToClass(ObjcIvarDecl **ivars,
+ unsigned numIvars) {
+ NumIvars = numIvars;
+ if (numIvars) {
+ Ivars = new ObjcIvarDecl*[numIvars];
+ memcpy(Ivars, ivars, numIvars*sizeof(ObjcIvarDecl*));
+ }
+}
+
/// addObjcMethods - Insert instance and methods declarations into
/// ObjcInterfaceDecl's InsMethods and ClsMethods fields.
///
}
}
if (AllIvarDecls.size()) { // Check for {} - no ivars in braces
- Actions.ObjcAddInstanceVariable(interfaceDecl,
+ Actions.ObjcAddVisibilityToIvars(interfaceDecl,
&AllIvarDecls[0], AllIvarDecls.size(), &AllVisibilities[0]);
Actions.ParseRecordBody(LBraceLoc, interfaceDecl,
&AllIvarDecls[0], AllIvarDecls.size());
tok::TokenKind MethodType, TypeTy *ReturnType,
IdentifierInfo *SelectorName, AttributeList *AttrList);
- virtual void ObjcAddInstanceVariable(DeclTy *ClassDec, DeclTy **Ivar,
- unsigned numIvars,
- tok::ObjCKeywordKind *visibility);
+ virtual void ObjcAddVisibilityToIvars(DeclTy *ClassDec, DeclTy **Ivar,
+ unsigned numIvars,
+ tok::ObjCKeywordKind *visibility);
private:
// UsualUnaryConversions - promotes integers (C99 6.3.1.1p2) and converts
// functions and arrays to their respective pointers (C99 6.3.2.1).
return IDecl;
}
-void Sema::ObjcAddInstanceVariable(DeclTy *ClassDecl, DeclTy **Ivar,
- unsigned numIvars,
- tok::ObjCKeywordKind *visibility) {
+void Sema::ObjcAddVisibilityToIvars(DeclTy *ClassDecl, DeclTy **Ivar,
+ unsigned numIvars,
+ tok::ObjCKeywordKind *visibility) {
assert((ClassDecl && numIvars) && "missing class or instance variable");
ObjcInterfaceDecl *OInterface = dyn_cast<ObjcInterfaceDecl>(
static_cast<Decl *>(ClassDecl));
// Okay, we successfully defined 'Record'.
if (Record)
Record->defineBody(&RecFields[0], RecFields.size());
+ else {
+ ObjcIvarDecl **ClsFields =
+ reinterpret_cast<ObjcIvarDecl**>(&RecFields[0]);
+ cast<ObjcInterfaceDecl>(static_cast<Decl*>(RecDecl))->
+ ObjcAddInstanceVariablesToClass(ClsFields, RecFields.size());
+ }
}
void Sema::ObjcAddMethodsToClass(DeclTy *ClassDecl,
08FB7793FE84155DC02AAC07 /* Project object */ = {
isa = PBXProject;
buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "clang" */;
+ compatibilityVersion = "Xcode 2.4";
hasScannedForEncodings = 1;
mainGroup = 08FB7794FE84155DC02AAC07 /* clang */;
projectDirPath = "";
class Expr;
class Stmt;
class FunctionDecl;
+class ObjcIvarDecl;
class ObjcMethodDecl;
class AttributeList;
class ObjcInterfaceDecl : public TypeDecl {
/// Ivars/NumIvars - This is a new[]'d array of pointers to Decls.
- FieldDecl **Ivars; // Null if not defined.
+ ObjcIvarDecl **Ivars; // Null if not defined.
int NumIvars; // -1 if not defined.
/// instance methods
InsMethods(0), NumInsMethods(-1), ClsMethods(0), NumClsMethods(-1),
isForwardDecl(FD) { }
- void addInstanceVariable(FieldDecl ivar);
+ void ObjcAddInstanceVariablesToClass(ObjcIvarDecl **ivars,
+ unsigned numIvars);
void ObjcAddMethods(ObjcMethodDecl **insMethods, unsigned numInsMembers,
ObjcMethodDecl **clsMethods, unsigned numClsMembers);
AttributeList *AttrList) {
return 0;
}
- virtual void ObjcAddInstanceVariable(DeclTy *ClassDec, DeclTy **Ivars,
- unsigned numIvars,
- tok::ObjCKeywordKind *visibility) {
+ virtual void ObjcAddVisibilityToIvars(DeclTy *ClassDec, DeclTy **Ivars,
+ unsigned numIvars,
+ tok::ObjCKeywordKind *visibility) {
return;
}
virtual void ObjcAddMethodsToClass(DeclTy *ClassDecl,