瀏覽代碼

LibJS: Fix this_value in native setters and getters

This fixes getting values from double proxies:
var p = new Proxy(new Proxy([], {}), {});
p.length
davidot 4 年之前
父節點
當前提交
f102b563
共有 1 個文件被更改,包括 3 次插入5 次删除
  1. 3 5
      Userland/Libraries/LibJS/Runtime/Object.cpp

+ 3 - 5
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;
             }
         }