diff --git a/Userland/Shell/PosixParser.cpp b/Userland/Shell/PosixParser.cpp index 711f23f9df..1c6fb1832a 100644 --- a/Userland/Shell/PosixParser.cpp +++ b/Userland/Shell/PosixParser.cpp @@ -780,7 +780,7 @@ ErrorOr> Parser::parse_command() return node; if (auto node = TRY(parse_simple_command())) - return node; + return make_ref_counted(node->position(), *node); auto node = TRY(parse_compound_command()); if (!node) @@ -800,7 +800,7 @@ ErrorOr> Parser::parse_command() if (!node) return nullptr; - return make_ref_counted(node->position(), *node); + return node; } ErrorOr> Parser::parse_function_definition() @@ -929,19 +929,21 @@ ErrorOr> Parser::parse_while_clause() "Expected 'do' after 'while'"_string.release_value_but_fixme_should_propagate_errors()); // while foo; bar -> loop { if foo { bar } else { break } } + auto position = start_position.with_end(peek().position.value_or(empty_position())); return make_ref_counted( - start_position.with_end(peek().position.value_or(empty_position())), + position, Optional {}, Optional {}, nullptr, - make_ref_counted( - start_position.with_end(peek().position.value_or(empty_position())), - Optional {}, - condition.release_nonnull(), - do_group.release_nonnull(), - make_ref_counted( - start_position, - AST::ContinuationControl::ContinuationKind::Break))); + make_ref_counted(position, + make_ref_counted( + position, + Optional {}, + condition.release_nonnull(), + do_group.release_nonnull(), + make_ref_counted( + start_position, + AST::ContinuationControl::ContinuationKind::Break)))); } ErrorOr> Parser::parse_until_clause() @@ -963,19 +965,21 @@ ErrorOr> Parser::parse_until_clause() "Expected 'do' after 'until'"_string.release_value_but_fixme_should_propagate_errors()); // until foo; bar -> loop { if foo { break } else { bar } } + auto position = start_position.with_end(peek().position.value_or(empty_position())); return make_ref_counted( - start_position.with_end(peek().position.value_or(empty_position())), + position, Optional {}, Optional {}, nullptr, - make_ref_counted( - start_position.with_end(peek().position.value_or(empty_position())), - Optional {}, - condition.release_nonnull(), - make_ref_counted( - start_position, - AST::ContinuationControl::ContinuationKind::Break), - do_group.release_nonnull())); + make_ref_counted(position, + make_ref_counted( + position, + Optional {}, + condition.release_nonnull(), + make_ref_counted( + start_position, + AST::ContinuationControl::ContinuationKind::Break), + do_group.release_nonnull()))); } ErrorOr> Parser::parse_brace_group() @@ -1084,12 +1088,13 @@ ErrorOr> Parser::parse_case_clause() syntax_error = nullptr; } + auto position = compound_list->position(); entries.append(AST::MatchEntry { .options = move(result.nodes), .match_names = {}, .match_as_position = {}, .pipe_positions = move(result.pipe_positions), - .body = move(compound_list), + .body = make_ref_counted(position, compound_list.release_nonnull()), }); }