diff --git a/Userland/Shell/PosixParser.cpp b/Userland/Shell/PosixParser.cpp index 66f2c2337d..a8f41965ed 100644 --- a/Userland/Shell/PosixParser.cpp +++ b/Userland/Shell/PosixParser.cpp @@ -125,16 +125,22 @@ static inline bool is_valid_name(StringView word) namespace Shell::Posix { template -static NonnullRefPtr reexpand(AST::Position position, Args&&... args) +static NonnullRefPtr immediate(String name, AST::Position position, Args&&... args) { return make_ref_counted( position, AST::NameWithPosition { - "reexpand"_string, + move(name), position, }, Vector> { forward(args)... }, - Optional {}); + empty_position()); +} + +template +static NonnullRefPtr reexpand(AST::Position position, Args&&... args) +{ + return immediate("reexpand"_string, position, forward(args)...); } ErrorOr Parser::fill_token_buffer(Optional starting_reduction) @@ -1592,21 +1598,15 @@ ErrorOr> Parser::parse_word() }; auto append_arithmetic_expansion = [&](ResolvedArithmeticExpansion const& x) -> ErrorOr { - auto node = make_ref_counted( + auto node = immediate( + "math"_string, token.position.value_or(empty_position()), - AST::NameWithPosition { - "math"_string, + reexpand( token.position.value_or(empty_position()), - }, - Vector> { - reexpand( + make_ref_counted( token.position.value_or(empty_position()), - make_ref_counted( - token.position.value_or(empty_position()), - x.source_expression, - AST::StringLiteral::EnclosureType::DoubleQuotes)), - }, - Optional {}); + x.source_expression, + AST::StringLiteral::EnclosureType::DoubleQuotes))); if (word) { word = make_ref_counted( @@ -1714,14 +1714,7 @@ ErrorOr> Parser::parse_word() arguments.append(*TRY(Parser { x.argument }.parse_word())); } - node = make_ref_counted( - token.position.value_or(empty_position()), - AST::NameWithPosition { - TRY(String::from_utf8(immediate_function_name)), - token.position.value_or(empty_position()), - }, - move(arguments), - Optional {}); + node = immediate(TRY(String::from_utf8(immediate_function_name)), token.position.value_or(empty_position()), move(arguments)); } if (x.expand == ResolvedParameterExpansion::Expand::Word) @@ -2048,18 +2041,6 @@ ErrorOr> Parser::parse_simple_command() if (!new_word) break; - // if (first) { - // first = false; - // new_word = make_ref_counted( - // new_word->position(), - // AST::NameWithPosition { - // "substitute_aliases"sv, - // empty_position(), - // }, - // Vector> { *new_word }, - // Optional {}); - // } - nodes.append(new_word.release_nonnull()); } else if (auto io_redirect = TRY(parse_io_redirect())) { nodes.append(io_redirect.release_nonnull());