@@ -246,6 +246,14 @@ auto Parser::prec(TokenKind tk) -> Parser::Prec {
246246 } // switch
247247}
248248
249+ auto Parser::is_c () const -> bool {
250+ return unit->language () == LanguageKind::kC ;
251+ }
252+
253+ auto Parser::is_cxx () const -> bool {
254+ return unit->language () == LanguageKind::kCXX ;
255+ }
256+
249257auto Parser::LA (int n) const -> const Token& {
250258 return unit->tokenAt (SourceLocation (cursor_ + n));
251259}
@@ -1462,6 +1470,8 @@ auto Parser::parse_nested_expession(ExpressionAST*& yyast,
14621470
14631471auto Parser::parse_fold_expression (ExpressionAST*& yyast,
14641472 const ExprContext& ctx) -> bool {
1473+ if (!is_cxx ()) return false ;
1474+
14651475 if (!lookat (TokenKind::T_LPAREN)) return false ;
14661476
14671477 if (parse_left_fold_expression (yyast, ctx)) return true ;
@@ -3513,6 +3523,8 @@ auto Parser::parse_for_statement(StatementAST*& yyast) -> bool {
35133523 SourceLocation colonLoc;
35143524
35153525 auto lookat_for_range_declaration = [&] {
3526+ if (!is_cxx ()) return false ;
3527+
35163528 LookaheadParser lookahead{this };
35173529
35183530 if (!parse_for_range_declaration (rangeDeclaration)) return false ;
@@ -6021,9 +6033,7 @@ auto Parser::parse_initializer_list(List<ExpressionAST*>*& yyast,
60216033auto Parser::lookat_designator () -> bool {
60226034 if (lookat (TokenKind::T_DOT)) return true ;
60236035
6024- if (unit->language () == LanguageKind::kCXX ) return false ;
6025-
6026- if (lookat (TokenKind::T_LBRACKET)) return true ;
6036+ if (is_c () && lookat (TokenKind::T_LBRACKET)) return true ;
60276037
60286038 return false ;
60296039}
@@ -6072,7 +6082,7 @@ auto Parser::parse_designated_initializer_clause(
60726082 *it = make_list_node (pool_, designator);
60736083 it = &(*it)->next ;
60746084
6075- if (unit-> language () == LanguageKind:: kC ) {
6085+ if (is_c () ) {
60766086 while (lookat_designator ()) {
60776087 DesignatorAST* designator = nullptr ;
60786088 parse_designator (designator);
0 commit comments