Add PushState overload to combine Parse::State change with StateStackEntry (#3485)

Shortens a common `PushState` pattern
This commit is contained in:
josh11b
2023-12-08 23:58:30 +00:00
committed by GitHub
parent 6e65a30b5d
commit b7d129b88c
17 changed files with 47 additions and 87 deletions
+5 -12
View File
@@ -120,9 +120,7 @@ auto HandleStatementForHeader(Context& context) -> void {
auto HandleStatementForHeaderIn(Context& context) -> void {
auto state = context.PopState();
state.state = State::StatementForHeaderFinish;
context.PushState(state);
context.PushState(state, State::StatementForHeaderFinish);
context.PushState(State::Expr);
}
@@ -151,9 +149,7 @@ auto HandleStatementIf(Context& context) -> void {
auto HandleStatementIfConditionFinish(Context& context) -> void {
auto state = context.PopState();
state.state = State::StatementIfThenBlockFinish;
context.PushState(state);
context.PushState(state, State::StatementIfThenBlockFinish);
context.PushState(State::CodeBlock);
}
@@ -162,8 +158,7 @@ auto HandleStatementIfThenBlockFinish(Context& context) -> void {
if (context.ConsumeAndAddLeafNodeIf(Lex::TokenKind::Else,
NodeKind::IfStatementElse)) {
state.state = State::StatementIfElseBlockFinish;
context.PushState(state);
context.PushState(state, State::StatementIfElseBlockFinish);
// `else if` is permitted as a special case.
context.PushState(context.PositionIs(Lex::TokenKind::If)
? State::StatementIf
@@ -182,8 +177,7 @@ auto HandleStatementIfElseBlockFinish(Context& context) -> void {
auto HandleStatementReturn(Context& context) -> void {
auto state = context.PopState();
state.state = State::StatementReturnFinish;
context.PushState(state);
context.PushState(state, State::StatementReturnFinish);
context.AddLeafNode(NodeKind::ReturnStatementStart, context.Consume());
@@ -227,8 +221,7 @@ auto HandleStatementWhile(Context& context) -> void {
auto HandleStatementWhileConditionFinish(Context& context) -> void {
auto state = context.PopState();
state.state = State::StatementWhileBlockFinish;
context.PushState(state);
context.PushState(state, State::StatementWhileBlockFinish);
context.PushState(State::CodeBlock);
}