From: Steve Naroff Date: Tue, 2 Oct 2007 21:43:37 +0000 (+0000) Subject: Remove Action::ActOnImpleIvarVsClassIvars(), it is only called by Sema (not Parser). X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a5997c4f36e0f5aa44623a5b1e3b914760d1ec68;p=clang Remove Action::ActOnImpleIvarVsClassIvars(), it is only called by Sema (not Parser). Add Sema::CheckImplementationIvars() to replace the previous action. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@42553 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/Sema/Sema.h b/Sema/Sema.h index b1906d3a24..e9dc4d0cb2 100644 --- a/Sema/Sema.h +++ b/Sema/Sema.h @@ -51,6 +51,7 @@ namespace clang { class ObjcImplementationDecl; class ObjcCategoryImplDecl; class ObjcCategoryDecl; + class ObjcIvarDecl; /// Sema - This implements semantic analysis and AST building for C. class Sema : public Action { @@ -216,6 +217,11 @@ private: const llvm::DenseMap& InsMap, const llvm::DenseMap& ClsMap); + /// CheckImplementationIvars - This routine checks if the instance variables + /// listed in the implelementation match those listed in the interface. + void CheckImplementationIvars(ObjcImplementationDecl *ImpDecl, + ObjcIvarDecl **Fields, unsigned nIvars); + /// ImplMethodsVsClassMethods - This is main routine to warn if any method /// remains unimplemented in the @implementation class. void ImplMethodsVsClassMethods(ObjcImplementationDecl* IMPDecl, @@ -421,9 +427,6 @@ public: virtual void ObjcAddMethodsToClass(Scope* S, DeclTy *ClassDecl, DeclTy **allMethods, unsigned allNum); - virtual void ActOnImpleIvarVsClassIvars(DeclTy *ClassDecl, - DeclTy **Fields, unsigned NumFields); - virtual DeclTy *ObjcBuildMethodDeclaration(SourceLocation MethodLoc, tok::TokenKind MethodType, TypeTy *ReturnType, Selector Sel, // optional arguments. The number of types/arguments is obtained diff --git a/Sema/SemaDecl.cpp b/Sema/SemaDecl.cpp index 64789bc3f5..1e0198aa85 100644 --- a/Sema/SemaDecl.cpp +++ b/Sema/SemaDecl.cpp @@ -1168,17 +1168,18 @@ Sema::DeclTy *Sema::ObjcStartClassImplementation(Scope *S, return IMPDecl; } -void Sema::ActOnImpleIvarVsClassIvars(DeclTy *ClassDecl, - DeclTy **Fields, unsigned numIvars) { - ObjcInterfaceDecl* IDecl = - cast(static_cast(ClassDecl)); - assert(IDecl && "missing named interface class decl"); - ObjcIvarDecl** ivars = reinterpret_cast(Fields); +void Sema::CheckImplementationIvars(ObjcImplementationDecl *ImpDecl, + ObjcIvarDecl **ivars, unsigned numIvars) { + assert(ImpDecl && "missing implementation decl"); + ObjcInterfaceDecl* IDecl = getObjCInterfaceDecl(ImpDecl->getIdentifier()); + + if (!IDecl) + return; assert(ivars && "missing @implementation ivars"); - // Check interface's Ivar list against those in the implementation. - // names and types must match. - // + // Check interface's Ivar list against those in the implementation. + // names and types must match. + // ObjcIvarDecl** IntfIvars = IDecl->getIntfDeclIvars(); int IntfNumIvars = IDecl->getIntfDeclNumIvars(); unsigned j = 0; @@ -1676,10 +1677,7 @@ void Sema::ActOnFields(Scope* S, cast(static_cast(RecDecl)); assert(IMPDecl && "ActOnFields - missing ObjcImplementationDecl"); IMPDecl->ObjcAddInstanceVariablesToClassImpl(ClsFields, RecFields.size()); - ObjcInterfaceDecl* IDecl = getObjCInterfaceDecl(IMPDecl->getIdentifier()); - if (IDecl) - ActOnImpleIvarVsClassIvars(static_cast(IDecl), - reinterpret_cast(&RecFields[0]), RecFields.size()); + CheckImplementationIvars(IMPDecl, ClsFields, RecFields.size()); } } } diff --git a/include/clang/AST/DeclObjC.h b/include/clang/AST/DeclObjC.h index 4509be0953..b0ff5feb9d 100644 --- a/include/clang/AST/DeclObjC.h +++ b/include/clang/AST/DeclObjC.h @@ -81,7 +81,8 @@ public: ListCategories(0), ForwardDecl(FD) { AllocIntfRefProtocols(numRefProtos); } - + + // This is necessary when converting a forward declaration to a definition. void AllocIntfRefProtocols(unsigned numRefProtos) { if (numRefProtos) { IntfRefProtocols = new ObjcProtocolDecl*[numRefProtos]; diff --git a/include/clang/Parse/Action.h b/include/clang/Parse/Action.h index 0376860160..73580badd8 100644 --- a/include/clang/Parse/Action.h +++ b/include/clang/Parse/Action.h @@ -448,10 +448,6 @@ public: DeclTy **allMethods, unsigned allNum) { return; } - virtual void ActOnImpleIvarVsClassIvars(DeclTy *ClassDecl, - DeclTy **Fields, unsigned NumFields) { - return; - } virtual DeclTy *ObjcStartProtoInterface(Scope* S, SourceLocation AtProtoInterfaceLoc, IdentifierInfo *ProtocolName, SourceLocation ProtocolLoc,