mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 06:27:45 +00:00
LibJS: Resolve the correct this value for calls in with statements
This commit is contained in:
parent
3a8dd3e78d
commit
28e552f853
1 changed files with 7 additions and 1 deletions
|
@ -339,9 +339,15 @@ ThrowCompletionOr<CallExpression::ThisAndCallee> CallExpression::compute_this_an
|
|||
return ThisAndCallee { this_value, callee };
|
||||
}
|
||||
|
||||
Value this_value = js_undefined();
|
||||
if (callee_reference.is_environment_reference()) {
|
||||
if (Object* base_object = callee_reference.base_environment().with_base_object(); base_object != nullptr)
|
||||
this_value = base_object;
|
||||
}
|
||||
|
||||
// [[Call]] will handle that in non-strict mode the this value becomes the global object
|
||||
return ThisAndCallee {
|
||||
js_undefined(),
|
||||
this_value,
|
||||
callee_reference.is_unresolvable()
|
||||
? TRY(m_callee->execute(interpreter, global_object)).release_value()
|
||||
: TRY(callee_reference.get_value(global_object))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue