diff --git a/Userland/Shell/AST.cpp b/Userland/Shell/AST.cpp index f155304c6d..572e7cfa5b 100644 --- a/Userland/Shell/AST.cpp +++ b/Userland/Shell/AST.cpp @@ -3691,6 +3691,17 @@ ErrorOr> ListValue::resolve_as_list(RefPtr shell) return resolve_slices(shell, move(values), m_slices); } +ErrorOr ListValue::resolve_as_string(RefPtr shell) +{ + if (!shell || !shell->posix_mode()) + return Value::resolve_as_string(shell); + + if (m_contained_values.is_empty()) + return resolve_slices(shell, String {}, m_slices); + + return resolve_slices(shell, TRY(m_contained_values[0]->resolve_as_string(shell)), m_slices); +} + ErrorOr> ListValue::resolve_without_cast(RefPtr shell) { Vector> values; diff --git a/Userland/Shell/AST.h b/Userland/Shell/AST.h index f70302ebb7..407afe02ad 100644 --- a/Userland/Shell/AST.h +++ b/Userland/Shell/AST.h @@ -310,6 +310,7 @@ private: class ListValue final : public Value { public: virtual ErrorOr> resolve_as_list(RefPtr) override; + virtual ErrorOr resolve_as_string(RefPtr) override; virtual ErrorOr> resolve_without_cast(RefPtr) override; virtual ErrorOr> clone() const override { return TRY(try_make_ref_counted(m_contained_values))->set_slices(m_slices); } virtual ~ListValue();