From f102b5634556471cace818fa62ed385ec5fd45b4 Mon Sep 17 00:00:00 2001 From: davidot Date: Sat, 19 Jun 2021 14:59:32 +0200 Subject: [PATCH] LibJS: Fix this_value in native setters and getters This fixes getting values from double proxies: var p = new Proxy(new Proxy([], {}), {}); p.length --- Userland/Libraries/LibJS/Runtime/Object.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/Userland/Libraries/LibJS/Runtime/Object.cpp b/Userland/Libraries/LibJS/Runtime/Object.cpp index 01db33c21c..e21f067991 100644 --- a/Userland/Libraries/LibJS/Runtime/Object.cpp +++ b/Userland/Libraries/LibJS/Runtime/Object.cpp @@ -278,7 +278,7 @@ Value Object::get_own_property(const PropertyName& property_name, Value receiver if (value_here.is_accessor()) return value_here.as_accessor().call_getter(receiver); if (value_here.is_native_property()) - return call_native_property_getter(value_here.as_native_property(), receiver); + return call_native_property_getter(value_here.as_native_property(), this); } return value_here; } @@ -937,9 +937,7 @@ bool Object::put_by_index(u32 property_index, Value value) return true; } if (value_here.value.is_native_property()) { - // FIXME: Why doesn't put_by_index() receive the receiver value from put()?! - auto receiver = this; - call_native_property_setter(value_here.value.as_native_property(), receiver, value); + call_native_property_setter(value_here.value.as_native_property(), this, value); return true; } } @@ -976,7 +974,7 @@ bool Object::put(const PropertyName& property_name, Value value, Value receiver) return true; } if (value_here.is_native_property()) { - call_native_property_setter(value_here.as_native_property(), receiver, value); + call_native_property_setter(value_here.as_native_property(), this, value); return true; } }