Extend bracket insertion to message sends to "super", e.g.,
super method:arg] will now recover nicely and insert the '[' before 'super'. llvm-svn: 113971
This commit is contained in:
parent
851b323866
commit
7617c7d295
|
@ -663,6 +663,18 @@ ExprResult Parser::ParseCastExpression(bool isUnaryExpression,
|
|||
break;
|
||||
}
|
||||
|
||||
// In an Objective-C method, if we have "super" followed by an identifier,
|
||||
// the token sequence is ill-fomed. However, if there's a ':' or ']' after
|
||||
// that identifier, this is probably a message send with a missing open
|
||||
// bracket. Treat it as such.
|
||||
if (getLang().ObjC1 && &II == Ident_super && Tok.is(tok::identifier) &&
|
||||
getCurScope()->isInObjcMethodScope() &&
|
||||
(NextToken().is(tok::colon) || NextToken().is(tok::r_square))) {
|
||||
Res = ParseObjCMessageExpressionBody(SourceLocation(), ILoc, ParsedType(),
|
||||
0);
|
||||
break;
|
||||
}
|
||||
|
||||
// Make sure to pass down the right value for isAddressOfOperand.
|
||||
if (isAddressOfOperand && isPostfixExpressionSuffixStart())
|
||||
isAddressOfOperand = false;
|
||||
|
|
|
@ -18,4 +18,18 @@ void f(A *a, int i, int j) {
|
|||
a method1:5+2 second:+(3.14159)];
|
||||
a method1:[a method1:3 second:j] second:i++]
|
||||
a getBlah];
|
||||
|
||||
int array[17];
|
||||
(void)array[a method1:5+2 second:+(3.14159)]];
|
||||
}
|
||||
|
||||
@interface B : A
|
||||
- (int)method1:(int)x second:(float)y;
|
||||
@end
|
||||
|
||||
@implementation B
|
||||
- (int)method1:(int)x second:(float)y {
|
||||
super method1:x second:y];
|
||||
return super getBlah];
|
||||
}
|
||||
@end
|
||||
|
|
Loading…
Reference in New Issue