summaryrefslogtreecommitdiff
path: root/src/shared/cplusplus
diff options
context:
space:
mode:
authorRoberto Raggi <roberto.raggi@nokia.com>2010-08-26 17:07:46 +0200
committerRoberto Raggi <roberto.raggi@nokia.com>2010-08-26 17:15:01 +0200
commit8131ff2df7eaeac5d751043ec30fb36d3dfdc2ac (patch)
tree739f7a768a16c1a0671337abf1cdf7358dcc9fe7 /src/shared/cplusplus
parent5e9d19cd66c56e8709efe04c896c960ff4f764f1 (diff)
downloadqt-creator-8131ff2df7eaeac5d751043ec30fb36d3dfdc2ac.tar.gz
Reduced the number of ambiguous C++ initializers.
Diffstat (limited to 'src/shared/cplusplus')
-rw-r--r--src/shared/cplusplus/Parser.cpp20
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;