summaryrefslogtreecommitdiff
path: root/src/shared/cplusplus/AST.cpp
diff options
context:
space:
mode:
authorErik Verbruggen <erik.verbruggen@nokia.com>2010-02-14 14:41:51 +0100
committerErik Verbruggen <erik.verbruggen@nokia.com>2010-02-15 09:27:00 +0100
commit2a59d2ae0c889fe6e4ac50a3f110b0103f880c15 (patch)
treeff989d0d79fcee735d24bf88ef7552aa43aa1c7f /src/shared/cplusplus/AST.cpp
parentabdd404ff5ec8539f0d3fd38139eb08ad8a03d66 (diff)
downloadqt-creator-2a59d2ae0c889fe6e4ac50a3f110b0103f880c15.tar.gz
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".
Diffstat (limited to 'src/shared/cplusplus/AST.cpp')
-rw-r--r--src/shared/cplusplus/AST.cpp81
1 files changed, 54 insertions, 27 deletions
diff --git a/src/shared/cplusplus/AST.cpp b/src/shared/cplusplus/AST.cpp
index 9a8312eaba..51f5ce0a5f 100644
--- a/src/shared/cplusplus/AST.cpp
+++ b/src/shared/cplusplus/AST.cpp
@@ -1561,14 +1561,16 @@ unsigned SizeofExpressionAST::lastToken() const
unsigned StringLiteralAST::firstToken() const
{
- return literal_token;
+ return at_token;
}
unsigned StringLiteralAST::lastToken() const
{
if (next)
return next->lastToken();
- return literal_token + 1;
+ if (literal_token)
+ return literal_token + 1;
+ return at_token + 1;
}
@@ -1910,7 +1912,7 @@ unsigned ObjCClassForwardDeclarationAST::firstToken() const
if (attribute_list)
return attribute_list->firstToken();
- return class_token;
+ return at_token;
}
unsigned ObjCClassForwardDeclarationAST::lastToken() const
@@ -1921,7 +1923,10 @@ unsigned ObjCClassForwardDeclarationAST::lastToken() const
else if (identifier_list)
return identifier_list->lastToken();
- return class_token + 1;
+ else if (class_token)
+ return class_token + 1;
+ else
+ return at_token + 1;
}
unsigned ObjCProtocolForwardDeclarationAST::firstToken() const
@@ -1929,7 +1934,7 @@ unsigned ObjCProtocolForwardDeclarationAST::firstToken() const
if (attribute_list)
return attribute_list->firstToken();
- return protocol_token;
+ return at_token;
}
unsigned ObjCProtocolForwardDeclarationAST::lastToken() const
@@ -1940,7 +1945,10 @@ unsigned ObjCProtocolForwardDeclarationAST::lastToken() const
else if (identifier_list)
return identifier_list->lastToken();
- return protocol_token + 1;
+ else if (protocol_token)
+ return protocol_token + 1;
+ else
+ return at_token + 1;
}
unsigned ObjCClassDeclarationAST::firstToken() const
@@ -1948,15 +1956,14 @@ unsigned ObjCClassDeclarationAST::firstToken() const
if (attribute_list)
return attribute_list->firstToken();
- if (interface_token)
- return interface_token;
- else
- return implementation_token;
+ return at_token;
}
unsigned ObjCClassDeclarationAST::lastToken() const
{
if (end_token) return end_token + 1;
+ if (ending_at_token)
+ return ending_at_token + 1;
if (member_declaration_list) return member_declaration_list->lastToken();
if (inst_vars_decl) return inst_vars_decl->lastToken();
if (protocol_refs)
@@ -1974,21 +1981,25 @@ unsigned ObjCClassDeclarationAST::lastToken() const
if (interface_token)
return interface_token + 1;
- else
+ else if (implementation_token)
return implementation_token + 1;
+ else
+ return at_token + 1;
}
unsigned ObjCProtocolDeclarationAST::firstToken() const
{
if (attribute_list)
return attribute_list->firstToken();
- return protocol_token;
+ return at_token;
}
unsigned ObjCProtocolDeclarationAST::lastToken() const
{
if (end_token)
return end_token + 1;
+ else if (ending_at_token)
+ return ending_at_token + 1;
else if (member_declaration_list)
return member_declaration_list->lastToken();
@@ -2001,8 +2012,10 @@ unsigned ObjCProtocolDeclarationAST::lastToken() const
else if (attribute_list)
return attribute_list->lastToken();
-
- return protocol_token + 1;
+ else if (protocol_token)
+ return protocol_token + 1;
+ else
+ return at_token + 1;
}
unsigned ObjCProtocolRefsAST::firstToken() const
@@ -2063,7 +2076,7 @@ unsigned ObjCMessageArgumentAST::lastToken() const
unsigned ObjCProtocolExpressionAST::firstToken() const
{
- return protocol_token;
+ return at_token;
}
unsigned ObjCProtocolExpressionAST::lastToken() const
@@ -2077,7 +2090,10 @@ unsigned ObjCProtocolExpressionAST::lastToken() const
if (lparen_token)
return lparen_token + 1;
- return protocol_token + 1;
+ if (protocol_token)
+ return protocol_token + 1;
+
+ return at_token + 1;
}
unsigned ObjCTypeNameAST::firstToken() const
@@ -2101,7 +2117,7 @@ unsigned ObjCTypeNameAST::lastToken() const
unsigned ObjCEncodeExpressionAST::firstToken() const
{
- return encode_token;
+ return at_token;
}
unsigned ObjCEncodeExpressionAST::lastToken() const
@@ -2109,7 +2125,10 @@ unsigned ObjCEncodeExpressionAST::lastToken() const
if (type_name)
return type_name->lastToken();
- return encode_token + 1;
+ if (encode_token)
+ return encode_token + 1;
+
+ return at_token + 1;
}
unsigned ObjCSelectorWithoutArgumentsAST::firstToken() const
@@ -2147,7 +2166,7 @@ unsigned ObjCSelectorWithArgumentsAST::lastToken() const
unsigned ObjCSelectorExpressionAST::firstToken() const
{
- return selector_token;
+ return at_token;
}
unsigned ObjCSelectorExpressionAST::lastToken() const
@@ -2158,7 +2177,9 @@ unsigned ObjCSelectorExpressionAST::lastToken() const
return selector->lastToken();
if (lparen_token)
return rparen_token + 1;
- return selector_token + 1;
+ if (selector_token)
+ return selector_token + 1;
+ return at_token + 1;
}
unsigned ObjCInstanceVariablesDeclarationAST::firstToken() const
@@ -2179,12 +2200,15 @@ unsigned ObjCInstanceVariablesDeclarationAST::lastToken() const
unsigned ObjCVisibilityDeclarationAST::firstToken() const
{
- return visibility_token;
+ return at_token;
}
unsigned ObjCVisibilityDeclarationAST::lastToken() const
{
- return visibility_token + 1;
+ if (visibility_token)
+ return visibility_token + 1;
+ else
+ return at_token + 1;
}
unsigned ObjCPropertyAttributeAST::firstToken() const
@@ -2207,7 +2231,7 @@ unsigned ObjCPropertyDeclarationAST::firstToken() const
if (attribute_list)
return attribute_list->firstToken();
- return property_token;
+ return at_token;
}
unsigned ObjCPropertyDeclarationAST::lastToken() const
@@ -2220,8 +2244,10 @@ unsigned ObjCPropertyDeclarationAST::lastToken() const
return property_attribute_list->lastToken();
else if (lparen_token)
return lparen_token + 1;
-
- return property_token + 1;
+ else if (property_token)
+ return property_token + 1;
+ else
+ return at_token + 1;
}
unsigned ObjCMessageArgumentDeclarationAST::firstToken() const
@@ -2354,7 +2380,7 @@ unsigned ObjCFastEnumerationAST::lastToken() const
unsigned ObjCSynchronizedStatementAST::firstToken() const
{
- return synchronized_token;
+ return at_token;
}
unsigned ObjCSynchronizedStatementAST::lastToken() const
@@ -2363,5 +2389,6 @@ unsigned ObjCSynchronizedStatementAST::lastToken() const
if (rparen_token) return rparen_token + 1;
if (synchronized_object) return synchronized_object->lastToken();
if (lparen_token) return lparen_token + 1;
- return synchronized_token + 1;
+ if (synchronized_token) return synchronized_token + 1;
+ return at_token + 1;
}