summaryrefslogtreecommitdiff
path: root/src/shared/cplusplus/Parser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/shared/cplusplus/Parser.cpp')
-rw-r--r--src/shared/cplusplus/Parser.cpp22
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;
}
}