forked from qt-creator/qt-creator
		
	Split Objective-C keyword parsing to handle the '@' separately.
Because apparently, while designing the Objective-C language, somebody
thought it was a world-class idea to allow any white-space between the
'@' character and the subsequent keyword. With this fix, we now
correctly parse:
    @  dynamic
and:
    @
      selector
and:
    @"foo"
     "bar"
    @"mooze"
(This last one is 1 single string split over multiple lines.)
Wonderful, isn't it?
What we (and Clang) do not support, but what GCC supports is something
like:
   @"foo"@@  "bar"  @"mooze"  @@
which is equivalent to @"foobarmooze".
			
			
This commit is contained in:
		| @@ -59,14 +59,14 @@ static const char *token_names[] = { | ||||
|  | ||||
|     ("<identifier>"), ("<numeric literal>"), ("<char literal>"), | ||||
|     ("<wide char literal>"), ("<string literal>"), ("<wide char literal>"), | ||||
|     ("<@string literal>"), ("<angle string literal>"), | ||||
|     ("<angle string literal>"), | ||||
|  | ||||
|     ("&"), ("&&"), ("&="), ("->"), ("->*"), ("^"), ("^="), (":"), ("::"), | ||||
|     (","), ("/"), ("/="), ("."), ("..."), (".*"), ("="), ("=="), ("!"), | ||||
|     ("!="), (">"), (">="), (">>"), (">>="), ("{"), ("["), ("<"), ("<="), | ||||
|     ("<<"), ("<<="), ("("), ("-"), ("-="), ("--"), ("%"), ("%="), ("|"), | ||||
|     ("|="), ("||"), ("+"), ("+="), ("++"), ("#"), ("##"), ("?"), ("}"), | ||||
|     ("]"), (")"), (";"), ("*"), ("*="), ("~"), ("~="), | ||||
|     ("&"), ("&&"), ("&="), ("->"), ("->*"), ("@"), ("^"), ("^="), (":"), | ||||
|     ("::"), (","), ("/"), ("/="), ("."), ("..."), (".*"), ("="), ("=="), | ||||
|     ("!"), ("!="), (">"), (">="), (">>"), (">>="), ("{"), ("["), ("<"), | ||||
|     ("<="), ("<<"), ("<<="), ("("), ("-"), ("-="), ("--"), ("%"), ("%="), | ||||
|     ("|"), ("|="), ("||"), ("+"), ("+="), ("++"), ("#"), ("##"), ("?"), | ||||
|     ("}"), ("]"), (")"), (";"), ("*"), ("*="), ("~"), ("~="), | ||||
|  | ||||
|     ("asm"), ("auto"), ("bool"), ("break"), ("case"), ("catch"), ("char"), | ||||
|     ("class"), ("const"), ("const_cast"), ("continue"), ("default"), | ||||
| @@ -84,12 +84,11 @@ static const char *token_names[] = { | ||||
|     // gnu | ||||
|     ("__attribute__"), ("__typeof__"), | ||||
|  | ||||
|     // objc @keywords | ||||
|     ("@catch"), ("@class"), ("@compatibility_alias"), ("@defs"), ("@dynamic"), | ||||
|     ("@encode"), ("@end"), ("@finally"), ("@implementation"), ("@interface"), | ||||
|     ("@not_keyword"), ("@optional"), ("@package"), ("@private"), ("@property"), | ||||
|     ("@protected"), ("@protocol"), ("@public"), ("@required"), ("@selector"), | ||||
|     ("@synchronized"), ("@synthesize"), ("@throw"), ("@try"), | ||||
|     // objc keywords | ||||
|     ("@compatibility_alias"), ("@defs"), ("@dynamic"), ("@encode"), ("@end"), | ||||
|     ("@finally"), ("@implementation"), ("@interface"), ("@not_keyword"), | ||||
|     ("@optional"), ("@package"), ("@property"), ("@protocol"), ("@required"), | ||||
|     ("@selector"), ("@synchronized"), ("@synthesize"), | ||||
|  | ||||
|     ("SIGNAL"), ("SLOT"), ("Q_SIGNAL"), ("Q_SLOT"), ("signals"), ("slots"), | ||||
|     ("Q_FOREACH"), ("Q_D"), ("Q_Q"), | ||||
| @@ -124,7 +123,6 @@ const char *Token::spell() const | ||||
|     case T_NUMERIC_LITERAL: | ||||
|     case T_CHAR_LITERAL: | ||||
|     case T_STRING_LITERAL: | ||||
|     case T_AT_STRING_LITERAL: | ||||
|     case T_ANGLE_STRING_LITERAL: | ||||
|     case T_WIDE_CHAR_LITERAL: | ||||
|     case T_WIDE_STRING_LITERAL: | ||||
|   | ||||
		Reference in New Issue
	
	Block a user