@@ -1098,6 +1098,8 @@ auto Parser::parse_nested_name_specifier(NestedNameSpecifierAST*& yyast,
10981098}
10991099
11001100auto Parser::parse_lambda_expression (ExpressionAST*& yyast) -> bool {
1101+ if (!is_parsing_cxx ()) return false ;
1102+
11011103 if (lookat (TokenKind::T_LBRACKET, TokenKind::T_LBRACKET)) return false ;
11021104 if (lookat (TokenKind::T_LBRACKET, TokenKind::T_COLON)) return false ;
11031105 if (!lookat (TokenKind::T_LBRACKET)) return false ;
@@ -5984,7 +5986,7 @@ auto Parser::parse_braced_init_list(BracedInitListAST*& ast,
59845986
59855987 ast->lbraceLoc = lbraceLoc;
59865988
5987- if (lookat_designator ()) {
5989+ if (is_parsing_cxx () && lookat_designator ()) {
59885990 auto it = &ast->expressionList ;
59895991
59905992 DesignatedInitializerClauseAST* designatedInitializerClause = nullptr ;
@@ -6039,7 +6041,17 @@ auto Parser::parse_initializer_list(List<ExpressionAST*>*& yyast,
60396041
60406042 ExpressionAST* expression = nullptr ;
60416043
6042- if (!parse_initializer_clause (expression, ctx)) return false ;
6044+ if (is_parsing_c () && lookat_designator ()) {
6045+ DesignatedInitializerClauseAST* designatedInitializerClause = nullptr ;
6046+
6047+ if (!parse_designated_initializer_clause (designatedInitializerClause)) {
6048+ parse_error (" expected designated initializer clause" );
6049+ }
6050+
6051+ expression = designatedInitializerClause;
6052+ } else if (!parse_initializer_clause (expression, ctx)) {
6053+ return false ;
6054+ }
60436055
60446056 SourceLocation ellipsisLoc;
60456057
@@ -6060,8 +6072,16 @@ auto Parser::parse_initializer_list(List<ExpressionAST*>*& yyast,
60606072
60616073 ExpressionAST* expression = nullptr ;
60626074
6063- if (!parse_initializer_clause (expression, ctx)) {
6064- parse_error (" expected initializer clause" );
6075+ if (is_parsing_c () && lookat_designator ()) {
6076+ DesignatedInitializerClauseAST* designatedInitializerClause = nullptr ;
6077+
6078+ if (!parse_designated_initializer_clause (designatedInitializerClause)) {
6079+ parse_error (" expected designated initializer clause" );
6080+ }
6081+
6082+ expression = designatedInitializerClause;
6083+ } else if (!parse_initializer_clause (expression, ctx)) {
6084+ return false ;
60656085 }
60666086
60676087 SourceLocation ellipsisLoc;
0 commit comments