Skip to content

Commit 2f48916

Browse files
authored
refactor(parse): cache "expression list is a fold expression" (#886)
1 parent 4248d1e commit 2f48916

File tree

1 file changed

+4
-1
lines changed

1 file changed

+4
-1
lines changed

source/parse.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,8 @@ struct primary_expression_node
145145
std::unique_ptr<inspect_expression_node>,
146146
std::unique_ptr<literal_node>
147147
> expr;
148+
// Cache to work around <https://github.com/llvm/llvm-project/issues/73336>.
149+
bool expression_list_is_fold_expression = false;
148150

149151

150152
// API
@@ -1556,7 +1558,7 @@ auto primary_expression_node::is_fold_expression() const
15561558
break;case identifier:
15571559
return *std::get<identifier>(expr) == "...";
15581560
break;case expression_list:
1559-
return std::get<expression_list>(expr)->is_fold_expression();
1561+
return expression_list_is_fold_expression;
15601562
break;case id_expression:
15611563
return std::get<id_expression>(expr)->is_fold_expression();
15621564
break;default: ; // the others can't contain folds
@@ -5445,6 +5447,7 @@ class parser
54455447
) {
54465448
expr_list->inside_initializer = false;
54475449
}
5450+
n->expression_list_is_fold_expression = expr_list->is_fold_expression();
54485451
n->expr = std::move(expr_list);
54495452
return n;
54505453
}

0 commit comments

Comments
 (0)