LibJS: Evaluate this in terms of ResolveThisBinding

This commit is contained in:
Andreas Kling 2021-06-25 11:40:03 +02:00
parent 92ce4ac23f
commit 6e1932e8b2
Notes: sideshowbarker 2024-07-18 11:32:46 +09:00
3 changed files with 10 additions and 1 deletions

View file

@ -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

View file

@ -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;

View file

@ -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<Bytecode::Interpreter>, Value value) { m_last_value = value; }
void set_last_value(Badge<Interpreter>, Value value) { m_last_value = value; }