diff options
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; } } |