summaryrefslogtreecommitdiff
path: root/src/shared/cplusplus
diff options
context:
space:
mode:
authorRoberto Raggi <roberto.raggi@nokia.com>2009-11-13 12:36:51 +0100
committerRoberto Raggi <roberto.raggi@nokia.com>2009-11-13 12:38:18 +0100
commitbaffd97efb1fd6da004fedf620577f8a97445793 (patch)
tree5131ff5b8f40d3d76ae9ed993093f1668b7a7c31 /src/shared/cplusplus
parent28ab85b13794f2443cfd714bbf1daa5e91bc6b2a (diff)
downloadqt-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.cpp4
-rw-r--r--src/shared/cplusplus/AST.h2
-rw-r--r--src/shared/cplusplus/ASTMatcher.cpp5
-rw-r--r--src/shared/cplusplus/ASTVisit.cpp2
-rw-r--r--src/shared/cplusplus/CheckDeclaration.cpp4
-rw-r--r--src/shared/cplusplus/Parser.cpp4
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;