summaryrefslogtreecommitdiff
path: root/src/shared/cplusplus/Parser.cpp
diff options
context:
space:
mode:
authorRoberto Raggi <roberto.raggi@nokia.com>2010-03-17 14:35:48 +0100
committerRoberto Raggi <roberto.raggi@nokia.com>2010-03-17 14:37:55 +0100
commit2d45bb807086e4f59e6c60f403f6f4f8b99fde34 (patch)
treef8287b70d572498d488eb8e299cecaa94dfded0d /src/shared/cplusplus/Parser.cpp
parentbfaf247abd1c3265a6822af934a921d59fbaef18 (diff)
downloadqt-creator-2d45bb807086e4f59e6c60f403f6f4f8b99fde34.tar.gz
Parse and create AST nodes for the Q_MOC_RUN extensions.
Diffstat (limited to 'src/shared/cplusplus/Parser.cpp')
-rw-r--r--src/shared/cplusplus/Parser.cpp41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/shared/cplusplus/Parser.cpp b/src/shared/cplusplus/Parser.cpp
index 95372cbad5..ce5afdd5fa 100644
--- a/src/shared/cplusplus/Parser.cpp
+++ b/src/shared/cplusplus/Parser.cpp
@@ -609,6 +609,21 @@ bool Parser::parseDeclaration(DeclarationAST *&node)
case T_AT_IMPLEMENTATION:
return parseObjCImplementation(node);
+ case T_Q_DECLARE_INTERFACE:
+ {
+ consumeToken();
+ unsigned lparen_token = 0;
+ match(T_LPAREN, &lparen_token);
+ NameAST *name = 0;
+ parseName(name);
+ unsigned comma_token = 0;
+ match(T_COMMA, &comma_token);
+ unsigned string_literal = 0;
+ match(T_STRING_LITERAL, &string_literal);
+ unsigned rparen_token = 0;
+ match(T_RPAREN, &rparen_token);
+ } return true;
+
case T_AT_END:
// TODO: should this be done here, or higher-up?
_translationUnit->error(cursor(), "skip stray token `%s'", tok().spell());
@@ -2019,6 +2034,32 @@ bool Parser::parseMemberSpecification(DeclarationAST *&node)
{
DEBUG_THIS_RULE();
switch (LA()) {
+ case T_Q_OBJECT:
+ case T_Q_GADGET:
+ {
+ QtObjectTagAST *ast = new (_pool) QtObjectTagAST;
+ ast->q_object_token = consumeToken();
+ node = ast;
+ return true;
+ }
+
+ case T_Q_PRIVATE_SLOT:
+ {
+ QtPrivateSlotAST *ast = new (_pool) QtPrivateSlotAST;
+ ast->q_private_slot_token = consumeToken();
+ match(T_LPAREN, &ast->lparen_token);
+ match(T_IDENTIFIER, &ast->dptr_token);
+ if (LA() == T_LPAREN) {
+ ast->dptr_lparen_token = consumeToken();
+ match(T_RPAREN, &ast->dptr_rparen_token);
+ }
+ match(T_COMMA, &ast->comma_token);
+ parseTypeSpecifier(ast->type_specifiers);
+ parseDeclarator(ast->declarator);
+ match(T_RPAREN, &ast->rparen_token);
+ node = ast;
+ } return true;
+
case T_SEMICOLON:
return parseEmptyDeclaration(node);