diff options
author | Roberto Raggi <roberto.raggi@nokia.com> | 2009-03-17 14:27:28 +0100 |
---|---|---|
committer | Roberto Raggi <roberto.raggi@nokia.com> | 2009-03-17 14:27:28 +0100 |
commit | a744a731450bedc523f2f2e275b96c5634947c85 (patch) | |
tree | f4a4082aad54f73fcae7ec08d2082696341415ad /src/shared/cplusplus/Parser.cpp | |
parent | e3baca2e9a5f2415bf7f0e02d8803e6119577f6c (diff) | |
download | qt-creator-a744a731450bedc523f2f2e275b96c5634947c85.tar.gz |
Check for ambigious function-declarators/cpp-initializers.
Diffstat (limited to 'src/shared/cplusplus/Parser.cpp')
-rw-r--r-- | src/shared/cplusplus/Parser.cpp | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/shared/cplusplus/Parser.cpp b/src/shared/cplusplus/Parser.cpp index 76ba28264e..423a05e05b 100644 --- a/src/shared/cplusplus/Parser.cpp +++ b/src/shared/cplusplus/Parser.cpp @@ -997,7 +997,29 @@ bool Parser::parseDeclarator(DeclaratorAST *&node, bool stopAtCppInitializer) if (NestedExpressionAST *expr = initializer->asNestedExpression()) { if (expr->expression && expr->rparen_token && (LA() == T_COMMA || LA() == T_SEMICOLON)) { rewind(lparen_token); + + // check for ambiguous declarators. + + consumeToken(); + ParameterDeclarationClauseAST *parameter_declaration_clause = 0; + if (parseParameterDeclarationClause(parameter_declaration_clause) && LA() == T_RPAREN) { + unsigned rparen_token = consumeToken(); + + FunctionDeclaratorAST *ast = new (_pool) FunctionDeclaratorAST; + ast->lparen_token = lparen_token; + ast->parameters = parameter_declaration_clause; + ast->as_cpp_initializer = initializer; + ast->rparen_token = rparen_token; + *postfix_ptr = ast; + postfix_ptr = &(*postfix_ptr)->next; + + blockErrors(blocked); + return true; + } + + blockErrors(blocked); + rewind(lparen_token); return true; } } |