aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/3rdparty/cplusplus/Parser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs/3rdparty/cplusplus/Parser.cpp')
-rw-r--r--src/libs/3rdparty/cplusplus/Parser.cpp15
1 files changed, 10 insertions, 5 deletions
diff --git a/src/libs/3rdparty/cplusplus/Parser.cpp b/src/libs/3rdparty/cplusplus/Parser.cpp
index 333f1e88f89..5023e982dd0 100644
--- a/src/libs/3rdparty/cplusplus/Parser.cpp
+++ b/src/libs/3rdparty/cplusplus/Parser.cpp
@@ -3031,7 +3031,7 @@ bool Parser::parseExpressionStatement(StatementAST *&node)
return parsed;
}
-bool Parser::parseStatement(StatementAST *&node)
+bool Parser::parseStatement(StatementAST *&node, bool blockLabeledStatement)
{
DEBUG_THIS_RULE();
switch (LA()) {
@@ -3058,6 +3058,8 @@ bool Parser::parseStatement(StatementAST *&node)
case T_CASE:
case T_DEFAULT:
+ if (blockLabeledStatement)
+ return false;
return parseLabeledStatement(node);
case T_BREAK:
@@ -3126,8 +3128,11 @@ bool Parser::parseStatement(StatementAST *&node)
}
default:
- if (LA() == T_IDENTIFIER && LA(2) == T_COLON)
+ if (LA() == T_IDENTIFIER && LA(2) == T_COLON) {
+ if (blockLabeledStatement)
+ return false;
return parseLabeledStatement(node);
+ }
return parseExpressionOrDeclarationStatement(node);
} // switch
@@ -3598,7 +3603,7 @@ bool Parser::parseLabeledStatement(StatementAST *&node)
LabeledStatementAST *ast = new (_pool) LabeledStatementAST;
ast->label_token = consumeToken();
ast->colon_token = consumeToken();
- parseStatement(ast->statement);
+ parseStatement(ast->statement, /*blockLabeledStatement =*/ true);
node = ast;
return true;
}
@@ -3608,7 +3613,7 @@ bool Parser::parseLabeledStatement(StatementAST *&node)
LabeledStatementAST *ast = new (_pool) LabeledStatementAST;
ast->label_token = consumeToken();
match(T_COLON, &ast->colon_token);
- parseStatement(ast->statement);
+ parseStatement(ast->statement, /*blockLabeledStatement =*/ true);
node = ast;
return true;
}
@@ -3618,7 +3623,7 @@ bool Parser::parseLabeledStatement(StatementAST *&node)
ast->case_token = consumeToken();
parseConstantExpression(ast->expression);
match(T_COLON, &ast->colon_token);
- parseStatement(ast->statement);
+ parseStatement(ast->statement, /*blockLabeledStatement =*/ true);
node = ast;
return true;
}