summaryrefslogtreecommitdiff
path: root/src/shared/cplusplus/Parser.cpp
diff options
context:
space:
mode:
authorErik Verbruggen <erik.verbruggen@nokia.com>2009-07-16 12:44:47 +0200
committerErik Verbruggen <erik.verbruggen@nokia.com>2009-07-16 12:44:47 +0200
commitef58d082ea6498f3c2bafeb68d8bd2359ec241c1 (patch)
treece233e1dda2969fcecd2f7f9ba0b7f17bdf3f9ca /src/shared/cplusplus/Parser.cpp
parenta262fce6d0577db8c3675bd918ce52e60c89daa4 (diff)
downloadqt-creator-ef58d082ea6498f3c2bafeb68d8bd2359ec241c1.tar.gz
Added ObjC encode expressions.
Diffstat (limited to 'src/shared/cplusplus/Parser.cpp')
-rw-r--r--src/shared/cplusplus/Parser.cpp32
1 files changed, 18 insertions, 14 deletions
diff --git a/src/shared/cplusplus/Parser.cpp b/src/shared/cplusplus/Parser.cpp
index 6ba6541068..571ceaa074 100644
--- a/src/shared/cplusplus/Parser.cpp
+++ b/src/shared/cplusplus/Parser.cpp
@@ -2839,13 +2839,15 @@ bool Parser::parseObjCStringLiteral(ExpressionAST *&node)
return true;
}
-bool Parser::parseObjCEncodeExpression(ExpressionAST *&)
+bool Parser::parseObjCEncodeExpression(ExpressionAST *&node)
{
if (LA() != T_AT_ENCODE)
return false;
- /*unsigned encode_token = */ consumeToken();
- parseObjCTypeName();
+ ObjCEncodeExpressionAST *ast = new (_pool) ObjCEncodeExpressionAST;
+ ast->encode_token = consumeToken();
+ parseObjCTypeName(ast->type_name);
+ node = ast;
return true;
}
@@ -4349,7 +4351,8 @@ bool Parser::parseObjCMethodPrototype()
/*unsigned method_type_token = */ consumeToken();
- parseObjCTypeName();
+ ObjCTypeNameAST *type_name = 0;
+ parseObjCTypeName(type_name);
unsigned selector_token = 0;
@@ -4408,17 +4411,17 @@ bool Parser::parseObjCPropertyAttribute()
// objc-type-name ::= T_LPAREN objc-type-qualifiers-opt type-id T_RPAREN
//
-bool Parser::parseObjCTypeName()
+bool Parser::parseObjCTypeName(ObjCTypeNameAST *&node)
{
if (LA() != T_LPAREN)
return false;
- unsigned lparen_token = 0, rparen_token = 0;
- match(T_LPAREN, &lparen_token);
- parseObjCTypeQualifiers();
- ExpressionAST *type_id = 0;
- parseTypeId(type_id);
- match(T_RPAREN, &rparen_token);
+ ObjCTypeNameAST *ast = new (_pool) ObjCTypeNameAST;
+ match(T_LPAREN, &(ast->lparen_token));
+ parseObjCTypeQualifiers(ast->type_qualifier);
+ parseTypeId(ast->type_id);
+ match(T_RPAREN, &(ast->rparen_token));
+ node = ast;
return true;
}
@@ -4446,7 +4449,8 @@ bool Parser::parseObjCKeywordDeclaration()
unsigned colon_token = 0;
match(T_COLON, &colon_token);
- parseObjCTypeName();
+ ObjCTypeNameAST *type_name = 0;
+ parseObjCTypeName(type_name);
SpecifierAST *attributes = 0, **attr = &attributes;
while (parseAttributeSpecifier(*attr))
@@ -4458,7 +4462,7 @@ bool Parser::parseObjCKeywordDeclaration()
return true;
}
-bool Parser::parseObjCTypeQualifiers()
+bool Parser::parseObjCTypeQualifiers(unsigned &type_qualifier)
{
if (LA() != T_IDENTIFIER)
return false;
@@ -4467,7 +4471,7 @@ bool Parser::parseObjCTypeQualifiers()
const int k = classifyObjectiveCTypeQualifiers(id->chars(), id->size());
if (k == Token_identifier)
return false;
- consumeToken();
+ type_qualifier = consumeToken();
return true;
}