[[Set]] isn't correct with respect to the spec and Proxy
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 4 Nov 2019 23:29:10 +0000 (23:29 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 4 Nov 2019 23:29:10 +0000 (23:29 +0000)
https://bugs.webkit.org/show_bug.cgi?id=155012

Patch by Alexey Shvayka <shvaikalesh@gmail.com> on 2019-11-04
Reviewed by Saam Barati.

This patch merely removes a FIXME comment, as JavaScriptCore has already correct
implementation of ordinary [[Set]]. In step 2.b of https://tc39.es/ecma262/#sec-ordinarysetwithowndescriptor,
if `parent` is a Proxy, the algorithm returns result of Proxy's [[Set]] method call.
It is up to the author of "set" trap (if any) to consult the prototype chain.

All browsers pass https://test262.report/browse/built-ins/Proxy/set/call-parameters-prototype.js,
which asserts that no traps besides "set" are invoked on Proxies in prototype chain during [[Set]].

* runtime/JSObject.cpp:
(JSC::JSObject::putInlineSlow):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@252019 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/runtime/JSObject.cpp

index 552a1e4..5cb22e1 100644 (file)
@@ -1,3 +1,21 @@
+2019-11-04  Alexey Shvayka  <shvaikalesh@gmail.com>
+
+        [[Set]] isn't correct with respect to the spec and Proxy
+        https://bugs.webkit.org/show_bug.cgi?id=155012
+
+        Reviewed by Saam Barati.
+
+        This patch merely removes a FIXME comment, as JavaScriptCore has already correct
+        implementation of ordinary [[Set]]. In step 2.b of https://tc39.es/ecma262/#sec-ordinarysetwithowndescriptor,
+        if `parent` is a Proxy, the algorithm returns result of Proxy's [[Set]] method call.
+        It is up to the author of "set" trap (if any) to consult the prototype chain.
+
+        All browsers pass https://test262.report/browse/built-ins/Proxy/set/call-parameters-prototype.js,
+        which asserts that no traps besides "set" are invoked on Proxies in prototype chain during [[Set]].
+
+        * runtime/JSObject.cpp:
+        (JSC::JSObject::putInlineSlow):
+
 2019-11-04  Robin Morisset  <rmorisset@apple.com>
 
         Split ArithProfile into a Unary and a Binary version
index bdf5368..b54f1f2 100644 (file)
@@ -838,9 +838,6 @@ bool JSObject::putInlineSlow(JSGlobalObject* globalObject, PropertyName property
             }
         }
         if (obj->type() == ProxyObjectType) {
-            // FIXME: We shouldn't unconditionally perform [[Set]] here.
-            // We need to do more because this is observable behavior.
-            // https://bugs.webkit.org/show_bug.cgi?id=155012
             ProxyObject* proxy = jsCast<ProxyObject*>(obj);
             RELEASE_AND_RETURN(scope, proxy->ProxyObject::put(proxy, globalObject, propertyName, value, slot));
         }