From fd4aee7ef67a187e4228155e1a6e4909d302b6f0 Mon Sep 17 00:00:00 2001
From: Roberto Raggi <roberto.raggi@nokia.com>
Date: Mon, 7 Dec 2009 14:33:13 +0100
Subject: [PATCH] Added diagnostic messages for ctor-initializers.

---
 src/shared/cplusplus/Parser.cpp | 25 +++++++++++++------------
 1 file changed, 13 insertions(+), 12 deletions(-)

diff --git a/src/shared/cplusplus/Parser.cpp b/src/shared/cplusplus/Parser.cpp
index 04c19150f25..8bf2cb670a1 100644
--- a/src/shared/cplusplus/Parser.cpp
+++ b/src/shared/cplusplus/Parser.cpp
@@ -1837,6 +1837,8 @@ bool Parser::parseMemInitializerList(MemInitializerListAST *&node)
 
             if (parseMemInitializer(*initializer))
                 initializer = &(*initializer)->next;
+            else
+                _translationUnit->error(cursor(), "expected a member initializer");
         }
         return true;
     }
@@ -1847,19 +1849,18 @@ bool Parser::parseMemInitializer(MemInitializerListAST *&node)
 {
     DEBUG_THIS_RULE();
     NameAST *name = 0;
-    if (parseName(name) && LA() == T_LPAREN) {
-        MemInitializerAST *ast = new (_pool) MemInitializerAST;
-        ast->name = name;
-        ast->lparen_token = consumeToken();
-        parseExpressionList(ast->expression_list);
-        if (LA() == T_RPAREN)
-            ast->rparen_token = consumeToken();
+    if (! parseName(name))
+        return false;
 
-        node = new (_pool) MemInitializerListAST;
-        node->value = ast;
-        return true;
-    }
-    return false;
+    MemInitializerAST *ast = new (_pool) MemInitializerAST;
+    ast->name = name;
+    match(T_LPAREN, &ast->lparen_token);
+    parseExpressionList(ast->expression_list);
+    match(T_RPAREN, &ast->rparen_token);
+
+    node = new (_pool) MemInitializerListAST;
+    node->value = ast;
+    return true;
 }
 
 bool Parser::parseTypeIdList(ExpressionListAST *&node)
-- 
GitLab