diff options
author | Roberto Raggi <roberto.raggi@nokia.com> | 2010-08-26 17:07:46 +0200 |
---|---|---|
committer | Roberto Raggi <roberto.raggi@nokia.com> | 2010-08-26 17:15:01 +0200 |
commit | 8131ff2df7eaeac5d751043ec30fb36d3dfdc2ac (patch) | |
tree | 739f7a768a16c1a0671337abf1cdf7358dcc9fe7 /src/shared/cplusplus | |
parent | 5e9d19cd66c56e8709efe04c896c960ff4f764f1 (diff) | |
download | qt-creator-8131ff2df7eaeac5d751043ec30fb36d3dfdc2ac.tar.gz |
Reduced the number of ambiguous C++ initializers.
Diffstat (limited to 'src/shared/cplusplus')
-rw-r--r-- | src/shared/cplusplus/Parser.cpp | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/src/shared/cplusplus/Parser.cpp b/src/shared/cplusplus/Parser.cpp index a2747caa2b..7933d1e755 100644 --- a/src/shared/cplusplus/Parser.cpp +++ b/src/shared/cplusplus/Parser.cpp @@ -1304,6 +1304,24 @@ bool Parser::parseCoreDeclarator(DeclaratorAST *&node, SpecifierListAST *decl_sp return false; } +static bool maybeCppInitializer(DeclaratorAST *declarator) +{ + if (declarator->ptr_operator_list) + return false; + CoreDeclaratorAST *core_declarator = declarator->core_declarator; + if (! core_declarator) + return false; + DeclaratorIdAST *declarator_id = core_declarator->asDeclaratorId(); + if (! declarator_id) + return false; + else if (! declarator_id->name) + return false; + else if (! declarator_id->name->asSimpleName()) + return false; + + return true; +} + bool Parser::parseDeclarator(DeclaratorAST *&node, SpecifierListAST *decl_specifier_list, ClassSpecifierAST *declaringClass) { DEBUG_THIS_RULE(); @@ -1316,7 +1334,7 @@ bool Parser::parseDeclarator(DeclaratorAST *&node, SpecifierListAST *decl_specif unsigned startOfPostDeclarator = cursor(); if (LA() == T_LPAREN) { - if (! declaringClass) { + if (! declaringClass && LA(2) != T_RPAREN && maybeCppInitializer(node)) { unsigned lparen_token = cursor(); ExpressionAST *initializer = 0; |