diff options
Diffstat (limited to 'lib/Sema')
-rw-r--r-- | lib/Sema/SemaDeclAttr.cpp | 19 | ||||
-rw-r--r-- | lib/Sema/SemaDeclObjC.cpp | 25 | ||||
-rw-r--r-- | lib/Sema/SemaExprObjC.cpp | 2 | ||||
-rw-r--r-- | lib/Sema/SemaType.cpp | 11 |
4 files changed, 28 insertions, 29 deletions
diff --git a/lib/Sema/SemaDeclAttr.cpp b/lib/Sema/SemaDeclAttr.cpp index 2ceea33d07..ce38edd7c5 100644 --- a/lib/Sema/SemaDeclAttr.cpp +++ b/lib/Sema/SemaDeclAttr.cpp @@ -67,21 +67,16 @@ static bool hasFunctionProto(Decl *d) { /// arguments. It is an error to call this on a K&R function (use /// hasFunctionProto first). static unsigned getFunctionOrMethodNumArgs(Decl *d) { - if (const FunctionType *FnTy = getFunctionType(d)) { - const FunctionTypeProto *proto = cast<FunctionTypeProto>(FnTy); - return proto->getNumArgs(); - } else { - return cast<ObjCMethodDecl>(d)->getNumParams(); - } + if (const FunctionType *FnTy = getFunctionType(d)) + return cast<FunctionTypeProto>(FnTy)->getNumArgs(); + return cast<ObjCMethodDecl>(d)->param_size(); } static QualType getFunctionOrMethodArgType(Decl *d, unsigned Idx) { - if (const FunctionType *FnTy = getFunctionType(d)) { - const FunctionTypeProto *proto = cast<FunctionTypeProto>(FnTy); - return proto->getArgType(Idx); - } else { - return cast<ObjCMethodDecl>(d)->getParamDecl(Idx)->getType(); - } + if (const FunctionType *FnTy = getFunctionType(d)) + return cast<FunctionTypeProto>(FnTy)->getArgType(Idx); + + return cast<ObjCMethodDecl>(d)->param_begin()[Idx]->getType(); } static bool isFunctionOrMethodVariadic(Decl *d) { diff --git a/lib/Sema/SemaDeclObjC.cpp b/lib/Sema/SemaDeclObjC.cpp index b890637767..65cd4b4e54 100644 --- a/lib/Sema/SemaDeclObjC.cpp +++ b/lib/Sema/SemaDeclObjC.cpp @@ -46,11 +46,10 @@ void Sema::ObjCActOnStartOfMethodDef(Scope *FnBodyScope, DeclTy *D) { PushOnScopeChains(MDecl->getCmdDecl(), FnBodyScope); // Introduce all of the other parameters into this scope. - for (unsigned i = 0, e = MDecl->getNumParams(); i != e; ++i) { - ParmVarDecl *PDecl = MDecl->getParamDecl(i); - if (PDecl->getIdentifier()) - PushOnScopeChains(PDecl, FnBodyScope); - } + for (ObjCMethodDecl::param_iterator PI = MDecl->param_begin(), + E = MDecl->param_end(); PI != E; ++PI) + if ((*PI)->getIdentifier()) + PushOnScopeChains(*PI, FnBodyScope); } Sema::DeclTy *Sema:: @@ -992,9 +991,15 @@ bool Sema::MatchTwoMethodDeclarations(const ObjCMethodDecl *Method, if (Context.getTypeInfo(T1) != Context.getTypeInfo(T2)) return false; } - for (unsigned i = 0, e = Method->getNumParams(); i != e; ++i) { - T1 = Context.getCanonicalType(Method->getParamDecl(i)->getType()); - T2 = Context.getCanonicalType(PrevMethod->getParamDecl(i)->getType()); + + ObjCMethodDecl::param_iterator ParamI = Method->param_begin(), + E = Method->param_end(); + ObjCMethodDecl::param_iterator PrevI = PrevMethod->param_begin(); + + for (; ParamI != E; ++ParamI, ++PrevI) { + assert(PrevI != PrevMethod->param_end() && "Param mismatch"); + T1 = Context.getCanonicalType((*ParamI)->getType()); + T2 = Context.getCanonicalType((*PrevI)->getType()); if (T1 != T2) { // The result types are different. if (!matchBasedOnSizeAndAlignment) @@ -1103,8 +1108,8 @@ void Sema::ProcessPropertyDecl(ObjCPropertyDecl *property, if (Context.getCanonicalType(SetterMethod->getResultType()) != Context.VoidTy) Diag(SetterMethod->getLocation(), diag::err_setter_type_void); - if (SetterMethod->getNumParams() != 1 || - (SetterMethod->getParamDecl(0)->getType() != property->getType())) { + if (SetterMethod->param_size() != 1 || + ((*SetterMethod->param_begin())->getType() != property->getType())) { Diag(property->getLocation(), diag::err_accessor_property_type_mismatch) << property->getDeclName() diff --git a/lib/Sema/SemaExprObjC.cpp b/lib/Sema/SemaExprObjC.cpp index 25b41c64de..19dc3821c7 100644 --- a/lib/Sema/SemaExprObjC.cpp +++ b/lib/Sema/SemaExprObjC.cpp @@ -154,7 +154,7 @@ bool Sema::CheckMessageArgumentTypes(Expr **Args, unsigned NumArgs, Expr *argExpr = Args[i]; assert(argExpr && "CheckMessageArgumentTypes(): missing expression"); - QualType lhsType = Method->getParamDecl(i)->getType(); + QualType lhsType = Method->param_begin()[i]->getType(); QualType rhsType = argExpr->getType(); // If necessary, apply function/array conversion. C99 6.7.5.3p[7,8]. diff --git a/lib/Sema/SemaType.cpp b/lib/Sema/SemaType.cpp index 02ba807758..252cd2d533 100644 --- a/lib/Sema/SemaType.cpp +++ b/lib/Sema/SemaType.cpp @@ -662,7 +662,7 @@ QualType Sema::GetTypeForDeclarator(Declarator &D, Scope *S, unsigned Skip) { /// ObjCGetTypeForMethodDefinition - Builds the type for a method definition /// declarator QualType Sema::ObjCGetTypeForMethodDefinition(DeclTy *D) { - ObjCMethodDecl *MDecl = dyn_cast<ObjCMethodDecl>(static_cast<Decl *>(D)); + ObjCMethodDecl *MDecl = cast<ObjCMethodDecl>(static_cast<Decl *>(D)); QualType T = MDecl->getResultType(); llvm::SmallVector<QualType, 16> ArgTys; @@ -671,14 +671,13 @@ QualType Sema::ObjCGetTypeForMethodDefinition(DeclTy *D) { QualType selfTy = Context.getObjCInterfaceType(MDecl->getClassInterface()); selfTy = Context.getPointerType(selfTy); ArgTys.push_back(selfTy); - } - else + } else ArgTys.push_back(Context.getObjCIdType()); ArgTys.push_back(Context.getObjCSelType()); - for (int i = 0, e = MDecl->getNumParams(); i != e; ++i) { - ParmVarDecl *PDecl = MDecl->getParamDecl(i); - QualType ArgTy = PDecl->getType(); + for (ObjCMethodDecl::param_iterator PI = MDecl->param_begin(), + E = MDecl->param_end(); PI != E; ++PI) { + QualType ArgTy = (*PI)->getType(); assert(!ArgTy.isNull() && "Couldn't parse type?"); // Perform the default function/array conversion (C99 6.7.5.3p[7,8]). // This matches the conversion that is done in |