summaryrefslogtreecommitdiff
path: root/src/shared/cplusplus/Parser.cpp
diff options
context:
space:
mode:
authorRoberto Raggi <roberto.raggi@nokia.com>2009-11-10 14:03:40 +0100
committerRoberto Raggi <roberto.raggi@nokia.com>2009-11-10 16:20:11 +0100
commit1dbdbbefe7b4977e88c13c42556b35e44eee747a (patch)
treefbd4173cb1d444d71fcec211232610f51caefe16 /src/shared/cplusplus/Parser.cpp
parent86a8812beb9b122c37e474810dbf43567d727cac (diff)
downloadqt-creator-1dbdbbefe7b4977e88c13c42556b35e44eee747a.tar.gz
Cleanup base base specifiers.
Diffstat (limited to 'src/shared/cplusplus/Parser.cpp')
-rw-r--r--src/shared/cplusplus/Parser.cpp27
1 files changed, 18 insertions, 9 deletions
diff --git a/src/shared/cplusplus/Parser.cpp b/src/shared/cplusplus/Parser.cpp
index 40581cc9e9..dc89952caf 100644
--- a/src/shared/cplusplus/Parser.cpp
+++ b/src/shared/cplusplus/Parser.cpp
@@ -1550,17 +1550,23 @@ bool Parser::parseClassSpecifier(SpecifierAST *&node)
unsigned colon_token = 0;
if (LA() == T_COLON || LA() == T_LBRACE) {
- BaseSpecifierAST *base_clause = 0;
+ BaseSpecifierListAST *base_clause_list = 0;
+
if (LA() == T_COLON) {
colon_token = cursor();
- parseBaseClause(base_clause);
+
+ parseBaseClause(base_clause_list);
+
if (LA() != T_LBRACE) {
_translationUnit->error(cursor(), "expected `{' before `%s'", tok().spell());
- unsigned saved = cursor();
+
+ const unsigned saved = cursor();
+
for (int n = 0; n < 3 && LA() != T_EOF_SYMBOL; ++n, consumeToken()) {
if (LA() == T_LBRACE)
break;
}
+
if (LA() != T_LBRACE)
rewind(saved);
}
@@ -1571,7 +1577,7 @@ bool Parser::parseClassSpecifier(SpecifierAST *&node)
ast->attributes = attributes;
ast->name = name;
ast->colon_token = colon_token;
- ast->base_clause = base_clause;
+ ast->base_clause_list = base_clause_list;
if (LA() == T_LBRACE)
ast->lbrace_token = consumeToken();
@@ -1778,13 +1784,14 @@ bool Parser::parseInitDeclarator(DeclaratorAST *&node,
return true;
}
-bool Parser::parseBaseClause(BaseSpecifierAST *&node)
+bool Parser::parseBaseClause(BaseSpecifierListAST *&node)
{
DEBUG_THIS_RULE();
+
if (LA() == T_COLON) {
- consumeToken();
+ consumeToken(); // ### remove me
- BaseSpecifierAST **ast = &node;
+ BaseSpecifierListAST **ast = &node;
if (parseBaseSpecifier(*ast)) {
ast = &(*ast)->next;
@@ -1895,7 +1902,7 @@ bool Parser::parseExpressionList(ExpressionListAST *&node)
return false;
}
-bool Parser::parseBaseSpecifier(BaseSpecifierAST *&node)
+bool Parser::parseBaseSpecifier(BaseSpecifierListAST *&node)
{
DEBUG_THIS_RULE();
BaseSpecifierAST *ast = new (_pool) BaseSpecifierAST;
@@ -1918,7 +1925,9 @@ bool Parser::parseBaseSpecifier(BaseSpecifierAST *&node)
parseName(ast->name);
if (! ast->name)
_translationUnit->error(cursor(), "expected class-name");
- node = ast;
+
+ node = new (_pool) BaseSpecifierListAST;
+ node->value = ast;
return true;
}