diff options
author | Roberto Raggi <roberto.raggi@nokia.com> | 2010-03-17 14:35:48 +0100 |
---|---|---|
committer | Roberto Raggi <roberto.raggi@nokia.com> | 2010-03-17 14:37:55 +0100 |
commit | 2d45bb807086e4f59e6c60f403f6f4f8b99fde34 (patch) | |
tree | f8287b70d572498d488eb8e299cecaa94dfded0d /src/shared/cplusplus/Parser.cpp | |
parent | bfaf247abd1c3265a6822af934a921d59fbaef18 (diff) | |
download | qt-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.cpp | 41 |
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); |