From 00933591a2795d09dd1acff12a2d21bce7cb12c5 Mon Sep 17 00:00:00 2001 From: Fariborz Jahanian Date: Tue, 18 Sep 2007 00:25:23 +0000 Subject: [PATCH] Uses more description name for method implementation kind argument. Moves such argument as the last argument and uses defaul value. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@42073 91177308-0d34-0410-b5e6-96231b3b80d8 --- Parse/ParseObjc.cpp | 34 ++++++++++++++++------------------ Sema/Sema.h | 12 ++++++------ Sema/SemaDecl.cpp | 16 ++++++++-------- include/clang/Parse/Action.h | 14 ++++++++------ include/clang/Parse/Parser.h | 7 +++---- 5 files changed, 41 insertions(+), 42 deletions(-) diff --git a/Parse/ParseObjc.cpp b/Parse/ParseObjc.cpp index c4a785eed8..dd9ab2e152 100644 --- a/Parse/ParseObjc.cpp +++ b/Parse/ParseObjc.cpp @@ -216,7 +216,7 @@ Parser::DeclTy *Parser::ParseObjCAtInterfaceDeclaration( void Parser::ParseObjCInterfaceDeclList(DeclTy *interfaceDecl, tok::ObjCKeywordKind contextKey) { llvm::SmallVector allMethods; - tok::ObjCKeywordKind pi = tok::objc_not_keyword; + tok::ObjCKeywordKind MethodImplKind = tok::objc_not_keyword; while (1) { if (Tok.getKind() == tok::at) { SourceLocation AtLoc = ConsumeToken(); // the "@" @@ -226,12 +226,12 @@ void Parser::ParseObjCInterfaceDeclList(DeclTy *interfaceDecl, break; } else if (ocKind == tok::objc_required) { // protocols only ConsumeToken(); - pi = ocKind; + MethodImplKind = ocKind; if (contextKey != tok::objc_protocol) Diag(AtLoc, diag::err_objc_protocol_required); } else if (ocKind == tok::objc_optional) { // protocols only ConsumeToken(); - pi = ocKind; + MethodImplKind = ocKind; if (contextKey != tok::objc_protocol) Diag(AtLoc, diag::err_objc_protocol_optional); } else if (ocKind == tok::objc_property) { @@ -243,7 +243,7 @@ void Parser::ParseObjCInterfaceDeclList(DeclTy *interfaceDecl, } } if (Tok.getKind() == tok::minus || Tok.getKind() == tok::plus) { - DeclTy *methodPrototype = ParseObjCMethodPrototype(interfaceDecl, pi); + DeclTy *methodPrototype = ParseObjCMethodPrototype(interfaceDecl, MethodImplKind); allMethods.push_back(methodPrototype); // Consume the ';' here, since ParseObjCMethodPrototype() is re-used for // method definitions. @@ -367,15 +367,15 @@ void Parser::ParseObjCPropertyDecl(DeclTy *interfaceDecl) { /// objc-method-attributes: [OBJC2] /// __attribute__((deprecated)) /// -Parser::DeclTy *Parser::ParseObjCMethodPrototype(DeclTy *IDecl, - tok::ObjCKeywordKind& pi) { +Parser::DeclTy *Parser::ParseObjCMethodPrototype(DeclTy *IDecl, + tok::ObjCKeywordKind MethodImplKind) { assert((Tok.getKind() == tok::minus || Tok.getKind() == tok::plus) && "expected +/-"); tok::TokenKind methodType = Tok.getKind(); SourceLocation methodLoc = ConsumeToken(); - DeclTy *MDecl = ParseObjCMethodDecl(pi, methodType, methodLoc); + DeclTy *MDecl = ParseObjCMethodDecl(methodType, methodLoc, MethodImplKind); // Since this rule is used for both method declarations and definitions, // the caller is (optionally) responsible for consuming the ';'. return MDecl; @@ -484,8 +484,8 @@ Parser::TypeTy *Parser::ParseObjCTypeName() { /// objc-keyword-attributes: [OBJC2] /// __attribute__((unused)) /// -Parser::DeclTy *Parser::ParseObjCMethodDecl(tok::ObjCKeywordKind& pi, - tok::TokenKind mType, SourceLocation mLoc) { +Parser::DeclTy *Parser::ParseObjCMethodDecl(tok::TokenKind mType, SourceLocation mLoc, + tok::ObjCKeywordKind MethodImplKind) { TypeTy *ReturnType = 0; AttributeList *methodAttrs = 0; @@ -551,10 +551,10 @@ Parser::DeclTy *Parser::ParseObjCMethodDecl(tok::ObjCKeywordKind& pi, // If attributes exist after the method, parse them. if (getLang().ObjC2 && Tok.getKind() == tok::kw___attribute) methodAttrs = ParseAttributes(); - return Actions.ObjcBuildMethodDeclaration(pi, mLoc, mType, + return Actions.ObjcBuildMethodDeclaration(mLoc, mType, ReturnType, &KeyInfo[0], KeyInfo.size(), - methodAttrs); + methodAttrs, MethodImplKind); } else if (!selIdent) { Diag(Tok, diag::err_expected_ident); // missing selector name. } @@ -562,9 +562,9 @@ Parser::DeclTy *Parser::ParseObjCMethodDecl(tok::ObjCKeywordKind& pi, if (getLang().ObjC2 && Tok.getKind() == tok::kw___attribute) methodAttrs = ParseAttributes(); - return Actions.ObjcBuildMethodDeclaration(pi, - mLoc, mType, ReturnType, - selIdent, methodAttrs); + return Actions.ObjcBuildMethodDeclaration(mLoc, mType, ReturnType, + selIdent, methodAttrs, + MethodImplKind); } /// objc-protocol-refs: @@ -917,8 +917,7 @@ void Parser::ParseObjCInstanceMethodDefinition() { assert(Tok.getKind() == tok::minus && "ParseObjCInstanceMethodDefinition(): Expected '-'"); // FIXME: @optional/@protocol?? - tok::ObjCKeywordKind pi = tok::objc_not_keyword; - ParseObjCMethodPrototype(ObjcImpDecl, pi); + ParseObjCMethodPrototype(ObjcImpDecl); // parse optional ';' if (Tok.getKind() == tok::semi) ConsumeToken(); @@ -937,8 +936,7 @@ void Parser::ParseObjCClassMethodDefinition() { assert(Tok.getKind() == tok::plus && "ParseObjCClassMethodDefinition(): Expected '+'"); // FIXME: @optional/@protocol?? - tok::ObjCKeywordKind pi = tok::objc_not_keyword; - ParseObjCMethodPrototype(ObjcImpDecl, pi); + ParseObjCMethodPrototype(ObjcImpDecl); // parse optional ';' if (Tok.getKind() == tok::semi) ConsumeToken(); diff --git a/Sema/Sema.h b/Sema/Sema.h index 1b1aa781d1..4c50bf67eb 100644 --- a/Sema/Sema.h +++ b/Sema/Sema.h @@ -368,15 +368,15 @@ public: virtual void ObjcAddMethodsToClass(DeclTy *ClassDecl, DeclTy **allMethods, unsigned allNum); - virtual DeclTy *ObjcBuildMethodDeclaration(tok::ObjCKeywordKind& pi, - SourceLocation MethodLoc, + virtual DeclTy *ObjcBuildMethodDeclaration(SourceLocation MethodLoc, tok::TokenKind MethodType, TypeTy *ReturnType, ObjcKeywordDecl *Keywords, unsigned NumKeywords, - AttributeList *AttrList); - virtual DeclTy *ObjcBuildMethodDeclaration(tok::ObjCKeywordKind& pi, - SourceLocation MethodLoc, + AttributeList *AttrList, + tok::ObjCKeywordKind MethodImplKind); + virtual DeclTy *ObjcBuildMethodDeclaration(SourceLocation MethodLoc, tok::TokenKind MethodType, TypeTy *ReturnType, - IdentifierInfo *SelectorName, AttributeList *AttrList); + IdentifierInfo *SelectorName, AttributeList *AttrList, + tok::ObjCKeywordKind MethodImplKind); // This actions handles keyword message to classes. virtual ExprResult ActOnKeywordMessage(IdentifierInfo *receivingClassName, diff --git a/Sema/SemaDecl.cpp b/Sema/SemaDecl.cpp index 53efacfd0a..b9ac2b7ab0 100644 --- a/Sema/SemaDecl.cpp +++ b/Sema/SemaDecl.cpp @@ -1264,11 +1264,11 @@ void Sema::ObjcAddMethodsToClass(DeclTy *ClassDecl, return; } -Sema::DeclTy *Sema::ObjcBuildMethodDeclaration(tok::ObjCKeywordKind& pi, - SourceLocation MethodLoc, +Sema::DeclTy *Sema::ObjcBuildMethodDeclaration(SourceLocation MethodLoc, tok::TokenKind MethodType, TypeTy *ReturnType, ObjcKeywordDecl *Keywords, unsigned NumKeywords, - AttributeList *AttrList) { + AttributeList *AttrList, + tok::ObjCKeywordKind MethodDeclKind) { assert(NumKeywords && "Selector must be specified"); // Derive the selector name from the keyword declarations. @@ -1306,17 +1306,17 @@ Sema::DeclTy *Sema::ObjcBuildMethodDeclaration(tok::ObjCKeywordKind& pi, SelName, resultDeclType, 0, -1, AttrList, MethodType == tok::minus); ObjcMethod->setMethodParams(&Params[0], NumKeywords); - if (pi == tok::objc_optional) + if (MethodDeclKind == tok::objc_optional) ObjcMethod->setDeclImplementation(ObjcMethodDecl::Optional); else ObjcMethod->setDeclImplementation(ObjcMethodDecl::Required); return ObjcMethod; } -Sema::DeclTy *Sema::ObjcBuildMethodDeclaration(tok::ObjCKeywordKind& pi, - SourceLocation MethodLoc, +Sema::DeclTy *Sema::ObjcBuildMethodDeclaration(SourceLocation MethodLoc, tok::TokenKind MethodType, TypeTy *ReturnType, - IdentifierInfo *SelectorName, AttributeList *AttrList) { + IdentifierInfo *SelectorName, AttributeList *AttrList, + tok::ObjCKeywordKind MethodDeclKind) { const char *methodName = SelectorName->getName(); SelectorInfo &SelName = Context.getSelectorInfo(methodName, methodName+strlen(methodName)); @@ -1324,7 +1324,7 @@ Sema::DeclTy *Sema::ObjcBuildMethodDeclaration(tok::ObjCKeywordKind& pi, ObjcMethodDecl* ObjcMethod = new ObjcMethodDecl(MethodLoc, SelName, resultDeclType, 0, -1, AttrList, MethodType == tok::minus); - if (pi == tok::objc_optional) + if (MethodDeclKind == tok::objc_optional) ObjcMethod->setDeclImplementation(ObjcMethodDecl::Optional); else ObjcMethod->setDeclImplementation(ObjcMethodDecl::Required); diff --git a/include/clang/Parse/Action.h b/include/clang/Parse/Action.h index 50c437dd41..c644e75b6e 100644 --- a/include/clang/Parse/Action.h +++ b/include/clang/Parse/Action.h @@ -453,15 +453,17 @@ public: IdentifierInfo **ProtoRefNames, unsigned NumProtoRefs) { return 0; } - virtual DeclTy *ObjcBuildMethodDeclaration(tok::ObjCKeywordKind& pi, - SourceLocation MethodLoc, tok::TokenKind MethodType, TypeTy *ReturnType, + virtual DeclTy *ObjcBuildMethodDeclaration(SourceLocation MethodLoc, + tok::TokenKind MethodType, TypeTy *ReturnType, ObjcKeywordDecl *Keywords, unsigned NumKeywords, - AttributeList *AttrList) { + AttributeList *AttrList, + tok::ObjCKeywordKind MethodImplKind) { return 0; } - virtual DeclTy *ObjcBuildMethodDeclaration(tok::ObjCKeywordKind& pi, - SourceLocation MethodLoc, tok::TokenKind MethodType, TypeTy *ReturnType, - IdentifierInfo *SelectorName, AttributeList *AttrList) { + virtual DeclTy *ObjcBuildMethodDeclaration(SourceLocation MethodLoc, + tok::TokenKind MethodType, TypeTy *ReturnType, + IdentifierInfo *SelectorName, AttributeList *AttrList, + tok::ObjCKeywordKind MethodImplKind) { return 0; } // This actions handles keyword message to classes. diff --git a/include/clang/Parse/Parser.h b/include/clang/Parse/Parser.h index 1e51fe7f4b..9f57b13780 100644 --- a/include/clang/Parse/Parser.h +++ b/include/clang/Parse/Parser.h @@ -290,10 +290,9 @@ private: TypeTy *ParseObjCTypeName(); void ParseObjCMethodRequirement(); DeclTy *ParseObjCMethodPrototype(DeclTy *classOrCat, - tok::ObjCKeywordKind& pi); - DeclTy *ParseObjCMethodDecl(tok::ObjCKeywordKind& pi, - tok::TokenKind mType, - SourceLocation mLoc); + tok::ObjCKeywordKind MethodImplKind = tok::objc_not_keyword); + DeclTy *ParseObjCMethodDecl(tok::TokenKind mType, SourceLocation mLoc, + tok::ObjCKeywordKind MethodImplKind = tok::objc_not_keyword); void ParseObjCPropertyAttribute(DeclTy *interfaceDecl); void ParseObjCPropertyDecl(DeclTy *interfaceDecl); -- 2.40.0