From: Fariborz Jahanian Date: Fri, 9 Jan 2009 00:38:19 +0000 (+0000) Subject: Adding support for ObjC methods which have c-style X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=439c65892cc8629bbf541e0b8bda6b64cbcc4e6b;p=clang Adding support for ObjC methods which have c-style parameter list. This is work in progress. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@61964 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Parse/Action.h b/include/clang/Parse/Action.h index 4c524f48d2..257d62f46b 100644 --- a/include/clang/Parse/Action.h +++ b/include/clang/Parse/Action.h @@ -1133,6 +1133,7 @@ public: ObjCDeclSpec *ArgQT, // for arguments' in inout etc. TypeTy **ArgTypes, // non-zero when Sel.getNumArgs() > 0 IdentifierInfo **ArgNames, // non-zero when Sel.getNumArgs() > 0 + llvm::SmallVectorImpl &Cdecls, // c-style args AttributeList *AttrList, // optional // tok::objc_not_keyword, tok::objc_optional, tok::objc_required tok::ObjCKeywordKind impKind, diff --git a/lib/Parse/ParseObjc.cpp b/lib/Parse/ParseObjc.cpp index cc13a5e0ae..f52ecfb7fb 100644 --- a/lib/Parse/ParseObjc.cpp +++ b/lib/Parse/ParseObjc.cpp @@ -684,6 +684,7 @@ Parser::DeclTy *Parser::ParseObjCMethodDecl(SourceLocation mLoc, return 0; } + llvm::SmallVector CargNames; if (Tok.isNot(tok::colon)) { // If attributes exist after the method, parse them. AttributeList *MethodAttrs = 0; @@ -693,7 +694,8 @@ Parser::DeclTy *Parser::ParseObjCMethodDecl(SourceLocation mLoc, Selector Sel = PP.getSelectorTable().getNullarySelector(SelIdent); return Actions.ActOnMethodDeclaration(mLoc, Tok.getLocation(), mType, IDecl, DSRet, ReturnType, Sel, - 0, 0, 0, MethodAttrs, MethodImplKind); + 0, 0, 0, CargNames, + MethodAttrs, MethodImplKind); } llvm::SmallVector KeyIdents; @@ -748,13 +750,12 @@ Parser::DeclTy *Parser::ParseObjCMethodDecl(SourceLocation mLoc, ConsumeToken(); break; } - // FIXME: implement this... - // Parse the c-style argument declaration-specifier. DeclSpec DS; ParseDeclarationSpecifiers(DS); // Parse the declarator. Declarator ParmDecl(DS, Declarator::PrototypeContext); ParseDeclarator(ParmDecl); + CargNames.push_back(ParmDecl); } // FIXME: Add support for optional parmameter list... @@ -768,7 +769,8 @@ Parser::DeclTy *Parser::ParseObjCMethodDecl(SourceLocation mLoc, return Actions.ActOnMethodDeclaration(mLoc, Tok.getLocation(), mType, IDecl, DSRet, ReturnType, Sel, &ArgTypeQuals[0], &KeyTypes[0], - &ArgNames[0], MethodAttrs, + &ArgNames[0], CargNames, + MethodAttrs, MethodImplKind, isVariadic); } diff --git a/lib/Sema/Sema.h b/lib/Sema/Sema.h index 61be6445d1..bd7e0364a7 100644 --- a/lib/Sema/Sema.h +++ b/lib/Sema/Sema.h @@ -1208,6 +1208,7 @@ public: // optional arguments. The number of types/arguments is obtained // from the Sel.getNumArgs(). ObjCDeclSpec *ArgQT, TypeTy **ArgTypes, IdentifierInfo **ArgNames, + llvm::SmallVectorImpl &Cdecls, AttributeList *AttrList, tok::ObjCKeywordKind MethodImplKind, bool isVariadic = false); diff --git a/lib/Sema/SemaDeclObjC.cpp b/lib/Sema/SemaDeclObjC.cpp index 7623c08e15..3dfcb3a801 100644 --- a/lib/Sema/SemaDeclObjC.cpp +++ b/lib/Sema/SemaDeclObjC.cpp @@ -1272,6 +1272,7 @@ Sema::DeclTy *Sema::ActOnMethodDeclaration( // optional arguments. The number of types/arguments is obtained // from the Sel.getNumArgs(). ObjCDeclSpec *ArgQT, TypeTy **ArgTypes, IdentifierInfo **ArgNames, + llvm::SmallVectorImpl &Cdecls, AttributeList *AttrList, tok::ObjCKeywordKind MethodDeclKind, bool isVariadic) { Decl *ClassDecl = static_cast(classDecl);