diff options
author | Andreas Kling <kling@serenityos.org> | 2021-03-17 21:50:33 +0100 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2021-03-17 21:54:52 +0100 |
commit | 9e6d0dd879f99220844ff9b792ab01add57e36ae (patch) | |
tree | a8036eae32de03cc01975c5c17d3b3864ebc238a | |
parent | 3217e6237c4361281ab1b50eaa086f6b8eba7298 (diff) | |
download | serenity-9e6d0dd879f99220844ff9b792ab01add57e36ae.zip |
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.
-rw-r--r-- | Userland/Libraries/LibJS/Runtime/VM.cpp | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/Userland/Libraries/LibJS/Runtime/VM.cpp b/Userland/Libraries/LibJS/Runtime/VM.cpp index 5343297d27..894524f20d 100644 --- a/Userland/Libraries/LibJS/Runtime/VM.cpp +++ b/Userland/Libraries/LibJS/Runtime/VM.cpp @@ -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. |