diff --git a/Userland/Libraries/LibJS/AST.cpp b/Userland/Libraries/LibJS/AST.cpp index b4eac8d457..6f6a0a74be 100644 --- a/Userland/Libraries/LibJS/AST.cpp +++ b/Userland/Libraries/LibJS/AST.cpp @@ -1347,7 +1347,7 @@ Value SpreadExpression::execute(Interpreter& interpreter, GlobalObject& global_o Value ThisExpression::execute(Interpreter& interpreter, GlobalObject& global_object) const { InterpreterNodeScope node_scope { interpreter, *this }; - return get_this_environment(interpreter.vm()).get_this_binding(global_object); + return interpreter.vm().resolve_this_binding(global_object); } void ThisExpression::dump(int indent) const diff --git a/Userland/Libraries/LibJS/Runtime/VM.cpp b/Userland/Libraries/LibJS/Runtime/VM.cpp index cd40bd14cc..1740481d65 100644 --- a/Userland/Libraries/LibJS/Runtime/VM.cpp +++ b/Userland/Libraries/LibJS/Runtime/VM.cpp @@ -490,6 +490,13 @@ void VM::throw_exception(Exception& exception) unwind(ScopeType::Try); } +// 9.4.4 ResolveThisBinding ( ), https://tc39.es/ecma262/#sec-resolvethisbinding +Value VM::resolve_this_binding(GlobalObject& global_object) +{ + auto& environment = get_this_environment(*this); + return environment.get_this_binding(global_object); +} + String VM::join_arguments(size_t start_index) const { StringBuilder joined_arguments; diff --git a/Userland/Libraries/LibJS/Runtime/VM.h b/Userland/Libraries/LibJS/Runtime/VM.h index 1a90766991..3a6173ba9d 100644 --- a/Userland/Libraries/LibJS/Runtime/VM.h +++ b/Userland/Libraries/LibJS/Runtime/VM.h @@ -162,6 +162,8 @@ public: return running_execution_context().this_value; } + Value resolve_this_binding(GlobalObject&); + Value last_value() const { return m_last_value; } void set_last_value(Badge, Value value) { m_last_value = value; } void set_last_value(Badge, Value value) { m_last_value = value; }