mirror of https://github.com/microsoft/clang.git
[Parser] Support alternative operator token keyword args in Objective-C++
rdar://30741878 Differential revision: https://reviews.llvm.org/D50527 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@340301 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
4b752d0315
commit
d43e8cc026
|
@ -315,6 +315,19 @@ Parser::ParseRHSOfBinaryExpression(ExprResult LHS, prec::Level MinPrec) {
|
|||
return LHS;
|
||||
}
|
||||
|
||||
// In Objective-C++, alternative operator tokens can be used as keyword args
|
||||
// in message expressions. Unconsume the token so that it can reinterpreted
|
||||
// as an identifier in ParseObjCMessageExpressionBody. i.e., we support:
|
||||
// [foo meth:0 and:0];
|
||||
// [foo not_eq];
|
||||
if (getLangOpts().ObjC1 && getLangOpts().CPlusPlus &&
|
||||
Tok.isOneOf(tok::colon, tok::r_square) &&
|
||||
OpToken.getIdentifierInfo() != nullptr) {
|
||||
PP.EnterToken(Tok);
|
||||
Tok = OpToken;
|
||||
return LHS;
|
||||
}
|
||||
|
||||
// Special case handling for the ternary operator.
|
||||
ExprResult TernaryMiddle(true);
|
||||
if (NextTokPrec == prec::Conditional) {
|
||||
|
|
|
@ -0,0 +1,41 @@
|
|||
// RUN: %clang_cc1 -fsyntax-only -verify %s
|
||||
|
||||
@interface WeirdInterface
|
||||
-(void)allOfThem:(int)a
|
||||
and:(int)b
|
||||
and_eq:(int)c
|
||||
bitand:(int)d
|
||||
bitor:(int)e
|
||||
compl:(int)f
|
||||
not:(int)g
|
||||
not_eq:(int)h
|
||||
or:(int)i
|
||||
or_eq:(int)j
|
||||
xor:(int)k
|
||||
xor_eq:(int)l;
|
||||
|
||||
-(void)justAnd:(int)x and:(int)y;
|
||||
-(void)and;
|
||||
-(void)and:(int)x;
|
||||
@end
|
||||
|
||||
void call_it(WeirdInterface *x) {
|
||||
[x allOfThem:0
|
||||
and:0
|
||||
and_eq:0
|
||||
bitand:0
|
||||
bitor:0
|
||||
compl:0
|
||||
not:0
|
||||
not_eq:0
|
||||
or:0
|
||||
or_eq:0
|
||||
xor:0
|
||||
xor_eq:0];
|
||||
|
||||
[x and];
|
||||
[x and:0];
|
||||
[x &&:0]; // expected-error{{expected expression}};
|
||||
[x justAnd:0 and:1];
|
||||
[x and: 0 ? : 1];
|
||||
}
|
Loading…
Reference in New Issue