diff --git a/Userland/Shell/AST.cpp b/Userland/Shell/AST.cpp index 7bf4780e09..05f3e1fec5 100644 --- a/Userland/Shell/AST.cpp +++ b/Userland/Shell/AST.cpp @@ -3414,6 +3414,7 @@ RefPtr VariableDeclarations::run(RefPtr shell) auto value = var.value->run(shell); if (shell && shell->has_any_error()) break; + value = value->resolve_without_cast(shell); shell->set_local_variable(name, value.release_nonnull()); } @@ -3703,6 +3704,14 @@ Vector SpecialVariableValue::resolve_as_list(RefPtr shell) } } +NonnullRefPtr SpecialVariableValue::resolve_without_cast(RefPtr shell) +{ + if (!shell) + return *this; + + return make_ref_counted(resolve_as_list(shell)); +} + TildeValue::~TildeValue() { } diff --git a/Userland/Shell/AST.h b/Userland/Shell/AST.h index 9bb16dc033..d363234cd9 100644 --- a/Userland/Shell/AST.h +++ b/Userland/Shell/AST.h @@ -381,6 +381,7 @@ class SpecialVariableValue final : public Value { public: virtual Vector resolve_as_list(RefPtr) override; virtual String resolve_as_string(RefPtr) override; + virtual NonnullRefPtr resolve_without_cast(RefPtr) override; virtual NonnullRefPtr clone() const override { return make_ref_counted(m_name)->set_slices(m_slices); } virtual ~SpecialVariableValue(); SpecialVariableValue(char name) @@ -512,9 +513,15 @@ protected: RefPtr m_syntax_error_node; }; -#define NODE(name) \ - virtual String class_name() const override { return #name; } \ - virtual Kind kind() const override { return Kind::name; } +#define NODE(name) \ + virtual String class_name() const override \ + { \ + return #name; \ + } \ + virtual Kind kind() const override \ + { \ + return Kind::name; \ + } class PathRedirectionNode : public Node { public: