LibJS: Always synthesize "arguments" object when there's a callee

Instead of counting the number of call frames on the VM stack, we now
always fake the "arguments" object when the current call frame has
a callee value.

This fixes an issue with DOM event handlers in LibWeb not being able
to access "arguments" since they were called without an outer frame.
This commit is contained in:
Andreas Kling 2021-03-17 21:50:33 +01:00
commit 9e6d0dd879
Notes: sideshowbarker 2024-07-18 21:16:26 +09:00

View file

@ -164,7 +164,7 @@ void VM::set_variable(const FlyString& name, Value value, GlobalObject& global_o
Value VM::get_variable(const FlyString& name, GlobalObject& global_object)
{
if (!m_call_stack.is_empty()) {
if (name == names.arguments && m_call_stack.size() > 1) {
if (name == names.arguments && !call_frame().callee.is_empty()) {
// HACK: Special handling for the name "arguments":
// If the name "arguments" is defined in the current scope, for example via
// a function parameter, or by a local var declaration, we use that.