From: Steve Naroff Date: Mon, 17 Sep 2007 21:01:15 +0000 (+0000) Subject: Finish defining Action API for message expressions. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=708391a0e6cf848acc5277a1b9eaa919912944f5;p=clang Finish defining Action API for message expressions. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@42059 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/Parse/ParseObjc.cpp b/Parse/ParseObjc.cpp index d61d621093..87cc277add 100644 --- a/Parse/ParseObjc.cpp +++ b/Parse/ParseObjc.cpp @@ -1051,11 +1051,18 @@ Parser::ExprResult Parser::ParseObjCMessageExpression() { } ConsumeBracket(); // consume ']' + if (KeyInfo.size()) { + // We've just parsed a keyword message. + if (ReceiverName) + return Actions.ActOnKeywordMessage(ReceiverName, + &KeyInfo[0], KeyInfo.size()); + return Actions.ActOnKeywordMessage(ReceiverExpr, + &KeyInfo[0], KeyInfo.size()); + } + // We've just parsed a unary message (a message with no arguments). if (ReceiverName) - return Actions.ActOnMessageExpression(ReceiverName, - &KeyInfo[0], KeyInfo.size()); - return Actions.ActOnMessageExpression(ReceiverExpr, - &KeyInfo[0], KeyInfo.size()); + return Actions.ActOnUnaryMessage(ReceiverName, selIdent); + return Actions.ActOnUnaryMessage(ReceiverExpr, selIdent); } Parser::ExprResult Parser::ParseObjCStringLiteral() { diff --git a/Sema/Sema.h b/Sema/Sema.h index c1d3a3a05a..5272444086 100644 --- a/Sema/Sema.h +++ b/Sema/Sema.h @@ -371,6 +371,19 @@ public: virtual DeclTy *ObjcBuildMethodDeclaration(SourceLocation MethodLoc, tok::TokenKind MethodType, TypeTy *ReturnType, IdentifierInfo *SelectorName, AttributeList *AttrList); + + // This actions handles keyword message to classes. + virtual ExprResult ActOnKeywordMessage(IdentifierInfo *receivingClassName, + ObjcKeywordMessage *Keywords, unsigned NumKeywords); + // This action handles keyword messages to instances. + virtual ExprResult ActOnKeywordMessage(ExprTy *receiver, + ObjcKeywordMessage *Keywords, unsigned NumKeywords); + + // This actions handles keyword message to classes. + virtual ExprResult ActOnUnaryMessage(IdentifierInfo *receivingClassName, + IdentifierInfo *selName); + // This action handles keyword messages to instances. + virtual ExprResult ActOnUnaryMessage(ExprTy *receiver, IdentifierInfo *sName); private: // UsualUnaryConversions - promotes integers (C99 6.3.1.1p2) and converts // functions and arrays to their respective pointers (C99 6.3.2.1). diff --git a/Sema/SemaExpr.cpp b/Sema/SemaExpr.cpp index da1981f9a0..d7136a387a 100644 --- a/Sema/SemaExpr.cpp +++ b/Sema/SemaExpr.cpp @@ -1855,3 +1855,29 @@ Sema::ExprResult Sema::ParseObjCEncodeExpression(SourceLocation AtLoc, QualType t = Context.getPointerType(Context.CharTy); return new ObjCEncodeExpr(t, EncodedType, AtLoc, RParenLoc); } + +// This actions handles keyword message to classes. +Sema::ExprResult Sema::ActOnKeywordMessage(IdentifierInfo *receivingClassName, + ObjcKeywordMessage *Keywords, unsigned NumKeywords) +{ + return 0; +} + +// This action handles keyword messages to instances. +Sema::ExprResult Sema::ActOnKeywordMessage(ExprTy *receiver, + ObjcKeywordMessage *Keywords, unsigned NumKeywords) { + return 0; +} + +// This actions handles keyword message to classes. +Sema::ExprResult Sema::ActOnUnaryMessage(IdentifierInfo *receivingClassName, + IdentifierInfo *selName) { + return 0; +} + +// This action handles keyword messages to instances. +Sema::ExprResult Sema::ActOnUnaryMessage(ExprTy *receiver, + IdentifierInfo *selName) { + return 0; +} + diff --git a/include/clang/Parse/Action.h b/include/clang/Parse/Action.h index 2d7e8f452c..548ff1a7d7 100644 --- a/include/clang/Parse/Action.h +++ b/include/clang/Parse/Action.h @@ -460,15 +460,24 @@ public: return 0; } // This actions handles keyword message to classes. - virtual DeclTy *ActOnMessageExpression(IdentifierInfo *receivingClassName, + virtual ExprResult ActOnKeywordMessage(IdentifierInfo *receivingClassName, ObjcKeywordMessage *Keywords, unsigned NumKeywords) { return 0; } // This action handles keyword messages to instances. - virtual DeclTy *ActOnMessageExpression(ExprTy *receiver, + virtual ExprResult ActOnKeywordMessage(ExprTy *receiver, ObjcKeywordMessage *Keywords, unsigned NumKeywords) { return 0; } + // This actions handles keyword message to classes. + virtual ExprResult ActOnUnaryMessage(IdentifierInfo *receivingClassName, + IdentifierInfo *selName) { + return 0; + } + // This action handles keyword messages to instances. + virtual ExprResult ActOnUnaryMessage(ExprTy *receiver,IdentifierInfo *sName) { + return 0; + } virtual DeclTy *ObjcClassDeclaration(Scope *S, SourceLocation AtClassLoc, IdentifierInfo **IdentList, unsigned NumElts) {