summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Kling <kling@serenityos.org>2021-03-17 21:50:33 +0100
committerAndreas Kling <kling@serenityos.org>2021-03-17 21:54:52 +0100
commit9e6d0dd879f99220844ff9b792ab01add57e36ae (patch)
treea8036eae32de03cc01975c5c17d3b3864ebc238a
parent3217e6237c4361281ab1b50eaa086f6b8eba7298 (diff)
downloadserenity-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.cpp2
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.