diff options
author | Roberto Raggi <roberto.raggi@nokia.com> | 2009-11-13 12:36:51 +0100 |
---|---|---|
committer | Roberto Raggi <roberto.raggi@nokia.com> | 2009-11-13 12:38:18 +0100 |
commit | baffd97efb1fd6da004fedf620577f8a97445793 (patch) | |
tree | 5131ff5b8f40d3d76ae9ed993093f1668b7a7c31 /src/shared/cplusplus | |
parent | 28ab85b13794f2443cfd714bbf1daa5e91bc6b2a (diff) | |
download | qt-creator-baffd97efb1fd6da004fedf620577f8a97445793.tar.gz |
Fixed parsing of ctor-initializers and added a manual test for the AST matchers
Diffstat (limited to 'src/shared/cplusplus')
-rw-r--r-- | src/shared/cplusplus/AST.cpp | 4 | ||||
-rw-r--r-- | src/shared/cplusplus/AST.h | 2 | ||||
-rw-r--r-- | src/shared/cplusplus/ASTMatcher.cpp | 5 | ||||
-rw-r--r-- | src/shared/cplusplus/ASTVisit.cpp | 2 | ||||
-rw-r--r-- | src/shared/cplusplus/CheckDeclaration.cpp | 4 | ||||
-rw-r--r-- | src/shared/cplusplus/Parser.cpp | 4 |
6 files changed, 12 insertions, 9 deletions
diff --git a/src/shared/cplusplus/AST.cpp b/src/shared/cplusplus/AST.cpp index 1e6cae8969..9df97aa16f 100644 --- a/src/shared/cplusplus/AST.cpp +++ b/src/shared/cplusplus/AST.cpp @@ -983,8 +983,8 @@ unsigned MemInitializerAST::lastToken() const { if (rparen_token) return rparen_token + 1; - else if (expression) - return expression->lastToken(); + else if (expression_list) + return expression_list->lastToken(); else if (lparen_token) return lparen_token + 1; return name->lastToken(); diff --git a/src/shared/cplusplus/AST.h b/src/shared/cplusplus/AST.h index d30858f050..559932843b 100644 --- a/src/shared/cplusplus/AST.h +++ b/src/shared/cplusplus/AST.h @@ -1187,7 +1187,7 @@ class CPLUSPLUS_EXPORT MemInitializerAST: public AST public: NameAST *name; unsigned lparen_token; - ExpressionAST *expression; + ExpressionListAST *expression_list; unsigned rparen_token; public: diff --git a/src/shared/cplusplus/ASTMatcher.cpp b/src/shared/cplusplus/ASTMatcher.cpp index ec31e0e3d9..47dac58232 100644 --- a/src/shared/cplusplus/ASTMatcher.cpp +++ b/src/shared/cplusplus/ASTMatcher.cpp @@ -31,6 +31,7 @@ #include "ASTMatcher.h" #include "Control.h" #include "TranslationUnit.h" +#include "Literals.h" using namespace CPlusPlus; @@ -54,7 +55,7 @@ bool ASTMatcher::matchToken(unsigned tokenIndex, unsigned patternTokenIndex) con if (token.f.kind != otherToken.f.kind) return false; else if (token.is(T_IDENTIFIER)) { - if (token.identifier != otherToken.identifier) + if (! token.identifier->isEqualTo(otherToken.identifier)) return false; } return true; @@ -636,7 +637,7 @@ bool ASTMatcher::match(MemInitializerAST *node, MemInitializerAST *pattern) return false; if (! matchToken(node->lparen_token, pattern->lparen_token)) return false; - if (! AST::match(node->expression, pattern->expression, this)) + if (! AST::match(node->expression_list, pattern->expression_list, this)) return false; if (! matchToken(node->rparen_token, pattern->rparen_token)) return false; diff --git a/src/shared/cplusplus/ASTVisit.cpp b/src/shared/cplusplus/ASTVisit.cpp index 2d5d618dda..6e26f772b2 100644 --- a/src/shared/cplusplus/ASTVisit.cpp +++ b/src/shared/cplusplus/ASTVisit.cpp @@ -420,7 +420,7 @@ void MemInitializerAST::accept0(ASTVisitor *visitor) { if (visitor->visit(this)) { accept(name, visitor); - accept(expression, visitor); + accept(expression_list, visitor); } visitor->endVisit(this); } diff --git a/src/shared/cplusplus/CheckDeclaration.cpp b/src/shared/cplusplus/CheckDeclaration.cpp index 04ee291aef..d7d7029fa2 100644 --- a/src/shared/cplusplus/CheckDeclaration.cpp +++ b/src/shared/cplusplus/CheckDeclaration.cpp @@ -356,7 +356,9 @@ bool CheckDeclaration::visit(FunctionDefinitionAST *ast) bool CheckDeclaration::visit(MemInitializerAST *ast) { (void) semantic()->check(ast->name, _scope); - FullySpecifiedType ty = semantic()->check(ast->expression, _scope); + for (ExpressionListAST *it = ast->expression_list; it; it = it->next) { + FullySpecifiedType ty = semantic()->check(it->value, _scope); + } return false; } diff --git a/src/shared/cplusplus/Parser.cpp b/src/shared/cplusplus/Parser.cpp index 36b7d03e1c..5614355ab4 100644 --- a/src/shared/cplusplus/Parser.cpp +++ b/src/shared/cplusplus/Parser.cpp @@ -1849,7 +1849,7 @@ bool Parser::parseMemInitializer(MemInitializerListAST *&node) MemInitializerAST *ast = new (_pool) MemInitializerAST; ast->name = name; ast->lparen_token = consumeToken(); - parseExpression(ast->expression); + parseExpressionList(ast->expression_list); if (LA() == T_RPAREN) ast->rparen_token = consumeToken(); @@ -1896,7 +1896,7 @@ bool Parser::parseExpressionList(ExpressionListAST *&node) while (LA() == T_COMMA) { consumeToken(); // consume T_COMMA - if (parseExpression(expression)) { + if (parseAssignmentExpression(expression)) { *expression_list_ptr = new (_pool) ExpressionListAST; (*expression_list_ptr)->value = expression; expression_list_ptr = &(*expression_list_ptr)->next; |