Title: [231069] branches/safari-605-branch
Revision
231069
Author
[email protected]
Date
2018-04-26 13:47:13 -0700 (Thu, 26 Apr 2018)

Log Message

Cherry-pick r230459. rdar://problem/39766214

    [JSC] Introduce @putByIdDirectPrivate
    https://bugs.webkit.org/show_bug.cgi?id=184400

    Reviewed by Saam Barati.

    This patch adds @putByIdDirectPrivate() to use it for builtin JS.
    @getByIdDirectPrivate and @putByIdDirectPrivate are pair of intrinsics
    accessing to ECMAScript internal fields.

    This change removes accidental [[Put]] operation to an object whose [[Prototype]]
    has internal fields (not direct properties). By using @getByIdDirectPrivate() and
    @putByIdDirectPrivate(), we strongly keep the semantics of the ECMAScript internal
    fields that accessing to the internal fields does not traverse prototype chains.

    * builtins/ArrayIteratorPrototype.js:
    (globalPrivate.arrayIteratorValueNext):
    (globalPrivate.arrayIteratorKeyNext):
    (globalPrivate.arrayIteratorKeyValueNext):
    * builtins/ArrayPrototype.js:
    (globalPrivate.createArrayIterator):
    * builtins/AsyncFromSyncIteratorPrototype.js:
    (globalPrivate.AsyncFromSyncIteratorConstructor):
    * builtins/AsyncFunctionPrototype.js:
    (globalPrivate.asyncFunctionResume):
    * builtins/AsyncGeneratorPrototype.js:
    (globalPrivate.asyncGeneratorQueueEnqueue):
    (globalPrivate.asyncGeneratorQueueDequeue):
    (asyncGeneratorYieldAwaited):
    (globalPrivate.asyncGeneratorYield):
    (globalPrivate.doAsyncGeneratorBodyCall):
    (globalPrivate.asyncGeneratorResumeNext):
    * builtins/GeneratorPrototype.js:
    (globalPrivate.generatorResume):
    * builtins/MapIteratorPrototype.js:
    (globalPrivate.mapIteratorNext):
    * builtins/MapPrototype.js:
    (globalPrivate.createMapIterator):
    * builtins/ModuleLoaderPrototype.js:
    (forceFulfillPromise):
    * builtins/PromiseOperations.js:
    (globalPrivate.newHandledRejectedPromise):
    (globalPrivate.rejectPromise):
    (globalPrivate.fulfillPromise):
    (globalPrivate.initializePromise):
    * builtins/PromisePrototype.js:
    (then):
    * builtins/SetIteratorPrototype.js:
    (globalPrivate.setIteratorNext):
    * builtins/SetPrototype.js:
    (globalPrivate.createSetIterator):
    * builtins/StringIteratorPrototype.js:
    (next):
    * bytecode/BytecodeIntrinsicRegistry.h:
    * bytecompiler/NodesCodegen.cpp:
    (JSC::BytecodeIntrinsicNode::emit_intrinsic_putByIdDirect):
    (JSC::BytecodeIntrinsicNode::emit_intrinsic_putByIdDirectPrivate):

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

Modified Paths

Added Paths

Diff

Added: branches/safari-605-branch/JSTests/stress/put-by-id-direct.js (0 => 231069)


--- branches/safari-605-branch/JSTests/stress/put-by-id-direct.js	                        (rev 0)
+++ branches/safari-605-branch/JSTests/stress/put-by-id-direct.js	2018-04-26 20:47:13 UTC (rev 231069)
@@ -0,0 +1,23 @@
+var createBuiltin = $vm.createBuiltin;
+
+function shouldBe(actual, expected) {
+    if (actual !== expected)
+        throw new Error('bad value: ' + actual);
+}
+
+(function () {
+    var builtin = createBuiltin(`(function (obj, value) {
+        return @putByIdDirect(obj, "hello", value);
+    })`);
+    noInline(builtin);
+
+    var setValue = null;
+    var object = {
+        __proto__: {
+            hello: 30
+        }
+    };
+    builtin(object, 42);
+    shouldBe(object.hello, 42);
+    shouldBe(object.hasOwnProperty("hello"), true);
+}());

Modified: branches/safari-605-branch/Source/_javascript_Core/ChangeLog (231068 => 231069)


--- branches/safari-605-branch/Source/_javascript_Core/ChangeLog	2018-04-26 20:43:32 UTC (rev 231068)
+++ branches/safari-605-branch/Source/_javascript_Core/ChangeLog	2018-04-26 20:47:13 UTC (rev 231069)
@@ -1,3 +1,125 @@
+2018-04-26  Jason Marcell  <[email protected]>
+
+        Cherry-pick r230459. rdar://problem/39766214
+
+    [JSC] Introduce @putByIdDirectPrivate
+    https://bugs.webkit.org/show_bug.cgi?id=184400
+    
+    Reviewed by Saam Barati.
+    
+    This patch adds @putByIdDirectPrivate() to use it for builtin JS.
+    @getByIdDirectPrivate and @putByIdDirectPrivate are pair of intrinsics
+    accessing to ECMAScript internal fields.
+    
+    This change removes accidental [[Put]] operation to an object whose [[Prototype]]
+    has internal fields (not direct properties). By using @getByIdDirectPrivate() and
+    @putByIdDirectPrivate(), we strongly keep the semantics of the ECMAScript internal
+    fields that accessing to the internal fields does not traverse prototype chains.
+    
+    * builtins/ArrayIteratorPrototype.js:
+    (globalPrivate.arrayIteratorValueNext):
+    (globalPrivate.arrayIteratorKeyNext):
+    (globalPrivate.arrayIteratorKeyValueNext):
+    * builtins/ArrayPrototype.js:
+    (globalPrivate.createArrayIterator):
+    * builtins/AsyncFromSyncIteratorPrototype.js:
+    (globalPrivate.AsyncFromSyncIteratorConstructor):
+    * builtins/AsyncFunctionPrototype.js:
+    (globalPrivate.asyncFunctionResume):
+    * builtins/AsyncGeneratorPrototype.js:
+    (globalPrivate.asyncGeneratorQueueEnqueue):
+    (globalPrivate.asyncGeneratorQueueDequeue):
+    (asyncGeneratorYieldAwaited):
+    (globalPrivate.asyncGeneratorYield):
+    (globalPrivate.doAsyncGeneratorBodyCall):
+    (globalPrivate.asyncGeneratorResumeNext):
+    * builtins/GeneratorPrototype.js:
+    (globalPrivate.generatorResume):
+    * builtins/MapIteratorPrototype.js:
+    (globalPrivate.mapIteratorNext):
+    * builtins/MapPrototype.js:
+    (globalPrivate.createMapIterator):
+    * builtins/ModuleLoaderPrototype.js:
+    (forceFulfillPromise):
+    * builtins/PromiseOperations.js:
+    (globalPrivate.newHandledRejectedPromise):
+    (globalPrivate.rejectPromise):
+    (globalPrivate.fulfillPromise):
+    (globalPrivate.initializePromise):
+    * builtins/PromisePrototype.js:
+    (then):
+    * builtins/SetIteratorPrototype.js:
+    (globalPrivate.setIteratorNext):
+    * builtins/SetPrototype.js:
+    (globalPrivate.createSetIterator):
+    * builtins/StringIteratorPrototype.js:
+    (next):
+    * bytecode/BytecodeIntrinsicRegistry.h:
+    * bytecompiler/NodesCodegen.cpp:
+    (JSC::BytecodeIntrinsicNode::emit_intrinsic_putByIdDirect):
+    (JSC::BytecodeIntrinsicNode::emit_intrinsic_putByIdDirectPrivate):
+    
+    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@230459 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+    2018-04-08  Yusuke Suzuki  <[email protected]>
+
+            [JSC] Introduce @putByIdDirectPrivate
+            https://bugs.webkit.org/show_bug.cgi?id=184400
+
+            Reviewed by Saam Barati.
+
+            This patch adds @putByIdDirectPrivate() to use it for builtin JS.
+            @getByIdDirectPrivate and @putByIdDirectPrivate are pair of intrinsics
+            accessing to ECMAScript internal fields.
+
+            This change removes accidental [[Put]] operation to an object whose [[Prototype]]
+            has internal fields (not direct properties). By using @getByIdDirectPrivate() and
+            @putByIdDirectPrivate(), we strongly keep the semantics of the ECMAScript internal
+            fields that accessing to the internal fields does not traverse prototype chains.
+
+            * builtins/ArrayIteratorPrototype.js:
+            (globalPrivate.arrayIteratorValueNext):
+            (globalPrivate.arrayIteratorKeyNext):
+            (globalPrivate.arrayIteratorKeyValueNext):
+            * builtins/ArrayPrototype.js:
+            (globalPrivate.createArrayIterator):
+            * builtins/AsyncFromSyncIteratorPrototype.js:
+            (globalPrivate.AsyncFromSyncIteratorConstructor):
+            * builtins/AsyncFunctionPrototype.js:
+            (globalPrivate.asyncFunctionResume):
+            * builtins/AsyncGeneratorPrototype.js:
+            (globalPrivate.asyncGeneratorQueueEnqueue):
+            (globalPrivate.asyncGeneratorQueueDequeue):
+            (asyncGeneratorYieldAwaited):
+            (globalPrivate.asyncGeneratorYield):
+            (globalPrivate.doAsyncGeneratorBodyCall):
+            (globalPrivate.asyncGeneratorResumeNext):
+            * builtins/GeneratorPrototype.js:
+            (globalPrivate.generatorResume):
+            * builtins/MapIteratorPrototype.js:
+            (globalPrivate.mapIteratorNext):
+            * builtins/MapPrototype.js:
+            (globalPrivate.createMapIterator):
+            * builtins/ModuleLoaderPrototype.js:
+            (forceFulfillPromise):
+            * builtins/PromiseOperations.js:
+            (globalPrivate.newHandledRejectedPromise):
+            (globalPrivate.rejectPromise):
+            (globalPrivate.fulfillPromise):
+            (globalPrivate.initializePromise):
+            * builtins/PromisePrototype.js:
+            (then):
+            * builtins/SetIteratorPrototype.js:
+            (globalPrivate.setIteratorNext):
+            * builtins/SetPrototype.js:
+            (globalPrivate.createSetIterator):
+            * builtins/StringIteratorPrototype.js:
+            (next):
+            * bytecode/BytecodeIntrinsicRegistry.h:
+            * bytecompiler/NodesCodegen.cpp:
+            (JSC::BytecodeIntrinsicNode::emit_intrinsic_putByIdDirect):
+            (JSC::BytecodeIntrinsicNode::emit_intrinsic_putByIdDirectPrivate):
+
 2018-04-17  Kocsen Chung  <[email protected]>
 
         Cherry-pick r230662. rdar://problem/39496355

Modified: branches/safari-605-branch/Source/_javascript_Core/builtins/ArrayIteratorPrototype.js (231068 => 231069)


--- branches/safari-605-branch/Source/_javascript_Core/builtins/ArrayIteratorPrototype.js	2018-04-26 20:43:32 UTC (rev 231068)
+++ branches/safari-605-branch/Source/_javascript_Core/builtins/ArrayIteratorPrototype.js	2018-04-26 20:47:13 UTC (rev 231069)
@@ -49,10 +49,10 @@
     if (!@getByIdDirectPrivate(this, "arrayIteratorIsDone")) {
         var index = @getByIdDirectPrivate(this, "arrayIteratorNextIndex");
         var length = array.length >>> 0;
-        if (index >= length) {
-            this.@arrayIteratorIsDone = true;
-        } else {
-            this.@arrayIteratorNextIndex = index + 1;
+        if (index >= length)
+            @putByIdDirectPrivate(this, "arrayIteratorIsDone", true);
+        else {
+            @putByIdDirectPrivate(this, "arrayIteratorNextIndex", index + 1);
             done = false;
             value = array[index];
         }
@@ -72,10 +72,10 @@
     if (!@getByIdDirectPrivate(this, "arrayIteratorIsDone")) {
         var index = @getByIdDirectPrivate(this, "arrayIteratorNextIndex");
         var length = array.length >>> 0;
-        if (index >= length) {
-            this.@arrayIteratorIsDone = true;
-        } else {
-            this.@arrayIteratorNextIndex = index + 1;
+        if (index >= length)
+            @putByIdDirectPrivate(this, "arrayIteratorIsDone", true);
+        else {
+            @putByIdDirectPrivate(this, "arrayIteratorNextIndex", index + 1);
             done = false;
             value = index;
         }
@@ -95,10 +95,10 @@
     if (!@getByIdDirectPrivate(this, "arrayIteratorIsDone")) {
         var index = @getByIdDirectPrivate(this, "arrayIteratorNextIndex");
         var length = array.length >>> 0;
-        if (index >= length) {
-            this.@arrayIteratorIsDone = true;
-        } else {
-            this.@arrayIteratorNextIndex = index + 1;
+        if (index >= length)
+            @putByIdDirectPrivate(this, "arrayIteratorIsDone", true);
+        else {
+            @putByIdDirectPrivate(this, "arrayIteratorNextIndex", index + 1);
             done = false;
             value = [ index, array[index] ];
         }

Modified: branches/safari-605-branch/Source/_javascript_Core/builtins/ArrayPrototype.js (231068 => 231069)


--- branches/safari-605-branch/Source/_javascript_Core/builtins/ArrayPrototype.js	2018-04-26 20:43:32 UTC (rev 231068)
+++ branches/safari-605-branch/Source/_javascript_Core/builtins/ArrayPrototype.js	2018-04-26 20:47:13 UTC (rev 231069)
@@ -30,11 +30,11 @@
 {
     "use strict";
 
-    this.@iteratedObject = iteratedObject;
-    this.@arrayIteratorKind = kind;
-    this.@arrayIteratorNextIndex = 0;
-    this.@arrayIteratorNext = iterationFunction;
-    this.@arrayIteratorIsDone = false;
+    @putByIdDirectPrivate(this, "iteratedObject", iteratedObject);
+    @putByIdDirectPrivate(this, "arrayIteratorKind", kind);
+    @putByIdDirectPrivate(this, "arrayIteratorNextIndex", 0);
+    @putByIdDirectPrivate(this, "arrayIteratorNext", iterationFunction);
+    @putByIdDirectPrivate(this, "arrayIteratorIsDone", false);
 }
 
 function values()

Modified: branches/safari-605-branch/Source/_javascript_Core/builtins/AsyncFromSyncIteratorPrototype.js (231068 => 231069)


--- branches/safari-605-branch/Source/_javascript_Core/builtins/AsyncFromSyncIteratorPrototype.js	2018-04-26 20:43:32 UTC (rev 231068)
+++ branches/safari-605-branch/Source/_javascript_Core/builtins/AsyncFromSyncIteratorPrototype.js	2018-04-26 20:47:13 UTC (rev 231069)
@@ -161,6 +161,6 @@
 @constructor
 function AsyncFromSyncIteratorConstructor(syncIterator, nextMethod)
 {
-    this.@syncIterator = syncIterator;
-    this.@nextMethod = nextMethod;
+    @putByIdDirectPrivate(this, "syncIterator", syncIterator);
+    @putByIdDirectPrivate(this, "nextMethod", nextMethod);
 }

Modified: branches/safari-605-branch/Source/_javascript_Core/builtins/AsyncFunctionPrototype.js (231068 => 231069)


--- branches/safari-605-branch/Source/_javascript_Core/builtins/AsyncFunctionPrototype.js	2018-04-26 20:43:32 UTC (rev 231068)
+++ branches/safari-605-branch/Source/_javascript_Core/builtins/AsyncFunctionPrototype.js	2018-04-26 20:47:13 UTC (rev 231069)
@@ -34,15 +34,15 @@
         @throwTypeError("Async function illegally resumed");
 
     try {
-        generator.@generatorState = @GeneratorStateExecuting;
+        @putByIdDirectPrivate(generator, "generatorState", @GeneratorStateExecuting);
         value = @getByIdDirectPrivate(generator, "generatorNext").@call(@getByIdDirectPrivate(generator, "generatorThis"), generator, state, sentValue, resumeMode, @getByIdDirectPrivate(generator, "generatorFrame"));
         if (@getByIdDirectPrivate(generator, "generatorState") === @GeneratorStateExecuting) {
-            generator.@generatorState = @GeneratorStateCompleted;
+            @putByIdDirectPrivate(generator, "generatorState", @GeneratorStateCompleted);
             promiseCapability.@resolve(value);
             return promiseCapability.@promise;
         }
     } catch (error) {
-        generator.@generatorState = @GeneratorStateCompleted;
+        @putByIdDirectPrivate(generator, "generatorState", @GeneratorStateCompleted);
         promiseCapability.@reject(error);
         return promiseCapability.@promise;
     }

Modified: branches/safari-605-branch/Source/_javascript_Core/builtins/AsyncGeneratorPrototype.js (231068 => 231069)


--- branches/safari-605-branch/Source/_javascript_Core/builtins/AsyncGeneratorPrototype.js	2018-04-26 20:43:32 UTC (rev 231068)
+++ branches/safari-605-branch/Source/_javascript_Core/builtins/AsyncGeneratorPrototype.js	2018-04-26 20:47:13 UTC (rev 231069)
@@ -41,13 +41,13 @@
     if (@getByIdDirectPrivate(generator, "asyncGeneratorQueueFirst") === null) {
         @assert(@getByIdDirectPrivate(generator, "asyncGeneratorQueueLast") === null);
 
-        generator.@asyncGeneratorQueueFirst = item;
-        generator.@asyncGeneratorQueueLast = item;
+        @putByIdDirectPrivate(generator, "asyncGeneratorQueueFirst", item);
+        @putByIdDirectPrivate(generator, "asyncGeneratorQueueLast", item);
     } else {
         var last = @getByIdDirectPrivate(generator, "asyncGeneratorQueueLast");
-        item.@asyncGeneratorQueueItemPrevious = last;
-        last.@asyncGeneratorQueueItemNext = item;
-        generator.@asyncGeneratorQueueLast = item;
+        @putByIdDirectPrivate(item, "asyncGeneratorQueueItemPrevious", last);
+        @putByIdDirectPrivate(last, "asyncGeneratorQueueItemNext", item);
+        @putByIdDirectPrivate(generator, "asyncGeneratorQueueLast", item);
     }
 }
 
@@ -61,10 +61,10 @@
         return null;
 
     var updatedFirst = @getByIdDirectPrivate(result, "asyncGeneratorQueueItemNext");
-    generator.@asyncGeneratorQueueFirst = updatedFirst;
+    @putByIdDirectPrivate(generator, "asyncGeneratorQueueFirst", updatedFirst);
 
     if (updatedFirst === null)
-        generator.@asyncGeneratorQueueLast = null;
+        @putByIdDirectPrivate(generator, "asyncGeneratorQueueLast", null);
 
     return result;
 }
@@ -136,11 +136,11 @@
 
     function asyncGeneratorYieldAwaited(result)
     {
-        generator.@asyncGeneratorSuspendReason = @AsyncGeneratorSuspendReasonYield;
+        @putByIdDirectPrivate(generator, "asyncGeneratorSuspendReason", @AsyncGeneratorSuspendReasonYield);
         @asyncGeneratorResolve(generator, result, false);
     }
 
-    generator.@asyncGeneratorSuspendReason = @AsyncGeneratorSuspendReasonAwait;
+    @putByIdDirectPrivate(generator, "asyncGeneratorSuspendReason", @AsyncGeneratorSuspendReasonAwait);
 
     @awaitValue(generator, value, asyncGeneratorYieldAwaited);
 
@@ -170,16 +170,16 @@
     let value = @undefined;
     let state = @getByIdDirectPrivate(generator, "generatorState");
 
-    generator.@generatorState = @AsyncGeneratorStateExecuting;
-    generator.@asyncGeneratorSuspendReason = @AsyncGeneratorSuspendReasonNone;
+    @putByIdDirectPrivate(generator, "generatorState", @AsyncGeneratorStateExecuting);
+    @putByIdDirectPrivate(generator, "asyncGeneratorSuspendReason", @AsyncGeneratorSuspendReasonNone);
 
     try {
         value = @getByIdDirectPrivate(generator, "generatorNext").@call(@getByIdDirectPrivate(generator, "generatorThis"), generator, state, resumeValue, resumeMode, @getByIdDirectPrivate(generator, "generatorFrame"));
         if (@getByIdDirectPrivate(generator, "generatorState") === @AsyncGeneratorStateExecuting)
-            generator.@generatorState = @AsyncGeneratorStateCompleted;
+            @putByIdDirectPrivate(generator, "generatorState", @AsyncGeneratorStateCompleted);
     } catch (error) {
-        generator.@generatorState = @AsyncGeneratorStateCompleted;
-        generator.@asyncGeneratorSuspendReason = @AsyncGeneratorSuspendReasonNone;
+        @putByIdDirectPrivate(generator, "generatorState", @AsyncGeneratorStateCompleted);
+        @putByIdDirectPrivate(generator, "asyncGeneratorSuspendReason", @AsyncGeneratorSuspendReasonNone);
 
         return @asyncGeneratorReject(generator, error);
     }
@@ -196,7 +196,7 @@
         return @asyncGeneratorYield(generator, value, resumeMode);
 
     if (@getByIdDirectPrivate(generator, "generatorState") === @AsyncGeneratorStateCompleted) {
-        generator.@asyncGeneratorSuspendReason = @AsyncGeneratorSuspendReasonNone;
+        @putByIdDirectPrivate(generator, "asyncGeneratorSuspendReason", @AsyncGeneratorSuspendReasonNone);
         return @asyncGeneratorResolve(generator, value, true);
     }
 
@@ -224,13 +224,13 @@
 
     if (next.resumeMode !== @GeneratorResumeModeNormal) {
         if (state === @AsyncGeneratorStateSuspendedStart) {
-            generator.@generatorState = @AsyncGeneratorStateCompleted;
+            @putByIdDirectPrivate(generator, "generatorState", @AsyncGeneratorStateCompleted);
             state = @AsyncGeneratorStateCompleted;
         }
 
         if (state === @AsyncGeneratorStateCompleted) {
             if (next.resumeMode === @GeneratorResumeModeReturn) {
-                generator.@generatorState = @AsyncGeneratorStateAwaitingReturn;
+                @putByIdDirectPrivate(generator, "generatorState", @AsyncGeneratorStateAwaitingReturn);
 
                 const promiseCapability = @newPromiseCapability(@Promise);
                 promiseCapability.@resolve.@call(@undefined, next.value);
@@ -239,7 +239,7 @@
                     function (result) { generator.@generatorState = @AsyncGeneratorStateCompleted; @asyncGeneratorResolve(generator, result, true); },
                     function (error) { generator.@generatorState = @AsyncGeneratorStateCompleted; @asyncGeneratorReject(generator, error); });
 
-                throwawayCapabilityPromise.@promiseIsHandled = true;
+                @putByIdDirectPrivate(throwawayCapabilityPromise, "promiseIsHandled", true);
 
                 return @undefined;
             }

Modified: branches/safari-605-branch/Source/_javascript_Core/builtins/GeneratorPrototype.js (231068 => 231069)


--- branches/safari-605-branch/Source/_javascript_Core/builtins/GeneratorPrototype.js	2018-04-26 20:43:32 UTC (rev 231068)
+++ branches/safari-605-branch/Source/_javascript_Core/builtins/GeneratorPrototype.js	2018-04-26 20:47:13 UTC (rev 231069)
@@ -34,14 +34,14 @@
     var done = state === @GeneratorStateCompleted;
     if (!done) {
         try {
-            generator.@generatorState = @GeneratorStateExecuting;
+            @putByIdDirectPrivate(generator, "generatorState", @GeneratorStateExecuting);
             value = @getByIdDirectPrivate(generator, "generatorNext").@call(generatorThis, generator, state, sentValue, resumeMode, @getByIdDirectPrivate(generator, "generatorFrame"));
             if (@getByIdDirectPrivate(generator, "generatorState") === @GeneratorStateExecuting) {
-                generator.@generatorState = @GeneratorStateCompleted;
+                @putByIdDirectPrivate(generator, "generatorState", @GeneratorStateCompleted);
                 done = true;
             }
         } catch (error) {
-            generator.@generatorState = @GeneratorStateCompleted;
+            @putByIdDirectPrivate(generator, "generatorState", @GeneratorStateCompleted);
             throw error;
         }
     }

Modified: branches/safari-605-branch/Source/_javascript_Core/builtins/MapIteratorPrototype.js (231068 => 231069)


--- branches/safari-605-branch/Source/_javascript_Core/builtins/MapIteratorPrototype.js	2018-04-26 20:43:32 UTC (rev 231068)
+++ branches/safari-605-branch/Source/_javascript_Core/builtins/MapIteratorPrototype.js	2018-04-26 20:47:13 UTC (rev 231069)
@@ -31,7 +31,7 @@
     var value;
 
     bucket = @mapBucketNext(bucket);
-    this.@mapBucket = bucket;
+    @putByIdDirectPrivate(this, "mapBucket", bucket);
     var done = bucket === @sentinelMapBucket;
     if (!done) {
         var key = @mapBucketKey(bucket);

Modified: branches/safari-605-branch/Source/_javascript_Core/builtins/MapPrototype.js (231068 => 231069)


--- branches/safari-605-branch/Source/_javascript_Core/builtins/MapPrototype.js	2018-04-26 20:43:32 UTC (rev 231068)
+++ branches/safari-605-branch/Source/_javascript_Core/builtins/MapPrototype.js	2018-04-26 20:47:13 UTC (rev 231069)
@@ -30,9 +30,9 @@
     "use strict";
 
     @assert(@isMap(iteratedObject));
-    this.@iteratedObject = iteratedObject;
-    this.@mapIteratorKind = kind;
-    this.@mapBucket = @mapBucketHead(iteratedObject);
+    @putByIdDirectPrivate(this, "iteratedObject", iteratedObject);
+    @putByIdDirectPrivate(this, "mapIteratorKind", kind);
+    @putByIdDirectPrivate(this, "mapBucket", @mapBucketHead(iteratedObject));
 }
 
 function values()

Modified: branches/safari-605-branch/Source/_javascript_Core/builtins/ModuleLoaderPrototype.js (231068 => 231069)


--- branches/safari-605-branch/Source/_javascript_Core/builtins/ModuleLoaderPrototype.js	2018-04-26 20:43:32 UTC (rev 231068)
+++ branches/safari-605-branch/Source/_javascript_Core/builtins/ModuleLoaderPrototype.js	2018-04-26 20:47:13 UTC (rev 231069)
@@ -123,7 +123,7 @@
 {
     "use strict";
 
-    if (promise.@promiseState === @promiseStatePending)
+    if (@getByIdDirectPrivate(promise, "promiseState") === @promiseStatePending)
         @fulfillPromise(promise, value);
 }
 

Modified: branches/safari-605-branch/Source/_javascript_Core/builtins/PromiseOperations.js (231068 => 231069)


--- branches/safari-605-branch/Source/_javascript_Core/builtins/PromiseOperations.js	2018-04-26 20:43:32 UTC (rev 231068)
+++ branches/safari-605-branch/Source/_javascript_Core/builtins/PromiseOperations.js	2018-04-26 20:47:13 UTC (rev 231069)
@@ -88,7 +88,7 @@
 function newHandledRejectedPromise(error)
 {
     let promise = @Promise.@reject(error);
-    promise.@promiseIsHandled = true;
+    @putByIdDirectPrivate(promise, "promiseIsHandled", true);
     return promise;
 }
 
@@ -107,9 +107,9 @@
     "use strict";
 
     var reactions = @getByIdDirectPrivate(promise, "promiseReactions");
-    promise.@promiseResult = reason;
-    promise.@promiseReactions = @undefined;
-    promise.@promiseState = @promiseStateRejected;
+    @putByIdDirectPrivate(promise, "promiseResult", reason);
+    @putByIdDirectPrivate(promise, "promiseReactions", @undefined);
+    @putByIdDirectPrivate(promise, "promiseState", @promiseStateRejected);
 
     @InspectorInstrumentation.promiseRejected(promise, reason, reactions);
 
@@ -125,9 +125,9 @@
     "use strict";
 
     var reactions = @getByIdDirectPrivate(promise, "promiseReactions");
-    promise.@promiseResult = value;
-    promise.@promiseReactions = @undefined;
-    promise.@promiseState = @promiseStateFulfilled;
+    @putByIdDirectPrivate(promise, "promiseResult", value);
+    @putByIdDirectPrivate(promise, "promiseReactions", @undefined);
+    @putByIdDirectPrivate(promise, "promiseState", @promiseStateFulfilled);
 
     @InspectorInstrumentation.promiseFulfilled(promise, value, reactions);
 
@@ -218,9 +218,9 @@
     if (typeof executor !== 'function')
         @throwTypeError("Promise constructor takes a function argument");
 
-    this.@promiseState = @promiseStatePending;
-    this.@promiseReactions = [];
-    this.@promiseIsHandled = false;
+    @putByIdDirectPrivate(this, "promiseState", @promiseStatePending);
+    @putByIdDirectPrivate(this, "promiseReactions", []);
+    @putByIdDirectPrivate(this, "promiseIsHandled", false);
 
     var resolvingFunctions = @createResolvingFunctions(this);
     try {

Modified: branches/safari-605-branch/Source/_javascript_Core/builtins/PromisePrototype.js (231068 => 231069)


--- branches/safari-605-branch/Source/_javascript_Core/builtins/PromisePrototype.js	2018-04-26 20:43:32 UTC (rev 231068)
+++ branches/safari-605-branch/Source/_javascript_Core/builtins/PromisePrototype.js	2018-04-26 20:47:13 UTC (rev 231069)
@@ -59,7 +59,7 @@
         @enqueueJob(@promiseReactionJob, [state, reaction, @getByIdDirectPrivate(this, "promiseResult")]);
     }
 
-    this.@promiseIsHandled = true;
+    @putByIdDirectPrivate(this, "promiseIsHandled", true);
 
     return resultCapability.@promise;
 }

Modified: branches/safari-605-branch/Source/_javascript_Core/builtins/SetIteratorPrototype.js (231068 => 231069)


--- branches/safari-605-branch/Source/_javascript_Core/builtins/SetIteratorPrototype.js	2018-04-26 20:43:32 UTC (rev 231068)
+++ branches/safari-605-branch/Source/_javascript_Core/builtins/SetIteratorPrototype.js	2018-04-26 20:47:13 UTC (rev 231069)
@@ -31,7 +31,7 @@
     var value;
 
     bucket = @setBucketNext(bucket);
-    this.@setBucket = bucket;
+    @putByIdDirectPrivate(this, "setBucket", bucket);
     var done = bucket === @sentinelSetBucket;
     if (!done) {
         value = @setBucketKey(bucket);

Modified: branches/safari-605-branch/Source/_javascript_Core/builtins/SetPrototype.js (231068 => 231069)


--- branches/safari-605-branch/Source/_javascript_Core/builtins/SetPrototype.js	2018-04-26 20:43:32 UTC (rev 231068)
+++ branches/safari-605-branch/Source/_javascript_Core/builtins/SetPrototype.js	2018-04-26 20:47:13 UTC (rev 231069)
@@ -30,9 +30,9 @@
     "use strict";
 
     @assert(@isSet(iteratedObject));
-    this.@iteratedObject = iteratedObject;
-    this.@setIteratorKind = kind;
-    this.@setBucket = @setBucketHead(iteratedObject);
+    @putByIdDirectPrivate(this, "iteratedObject", iteratedObject);
+    @putByIdDirectPrivate(this, "setIteratorKind", kind);
+    @putByIdDirectPrivate(this, "setBucket", @setBucketHead(iteratedObject));
 }
 
 function values()

Modified: branches/safari-605-branch/Source/_javascript_Core/builtins/StringIteratorPrototype.js (231068 => 231069)


--- branches/safari-605-branch/Source/_javascript_Core/builtins/StringIteratorPrototype.js	2018-04-26 20:43:32 UTC (rev 231068)
+++ branches/safari-605-branch/Source/_javascript_Core/builtins/StringIteratorPrototype.js	2018-04-26 20:47:13 UTC (rev 231069)
@@ -40,9 +40,9 @@
     var string = @getByIdDirectPrivate(this, "iteratedString");
     if (string !== @undefined) {
         var length = string.length >>> 0;
-        if (position >= length) {
-            this.@iteratedString = @undefined;
-        } else {
+        if (position >= length)
+            @putByIdDirectPrivate(this, "iteratedString", @undefined);
+        else {
             done = false;
 
             var first = string.@charCodeAt(position);
@@ -56,7 +56,7 @@
                     value = string[position] + string[position + 1];
             }
 
-            this.@stringIteratorNextIndex = position + value.length;
+            @putByIdDirectPrivate(this, "stringIteratorNextIndex", position + value.length);
         }
     }
 

Modified: branches/safari-605-branch/Source/_javascript_Core/bytecode/BytecodeIntrinsicRegistry.h (231068 => 231069)


--- branches/safari-605-branch/Source/_javascript_Core/bytecode/BytecodeIntrinsicRegistry.h	2018-04-26 20:43:32 UTC (rev 231068)
+++ branches/safari-605-branch/Source/_javascript_Core/bytecode/BytecodeIntrinsicRegistry.h	2018-04-26 20:47:13 UTC (rev 231069)
@@ -55,6 +55,8 @@
     macro(throwRangeError) \
     macro(throwOutOfMemoryError) \
     macro(tryGetById) \
+    macro(putByIdDirect) \
+    macro(putByIdDirectPrivate) \
     macro(putByValDirect) \
     macro(toNumber) \
     macro(toString) \

Modified: branches/safari-605-branch/Source/_javascript_Core/bytecompiler/NodesCodegen.cpp (231068 => 231069)


--- branches/safari-605-branch/Source/_javascript_Core/bytecompiler/NodesCodegen.cpp	2018-04-26 20:43:32 UTC (rev 231068)
+++ branches/safari-605-branch/Source/_javascript_Core/bytecompiler/NodesCodegen.cpp	2018-04-26 20:47:13 UTC (rev 231069)
@@ -966,6 +966,37 @@
     return generator.emitUnaryNoDstOp(op_argument_count, generator.finalDestination(dst));
 }
 
+RegisterID* BytecodeIntrinsicNode::emit_intrinsic_putByIdDirect(BytecodeGenerator& generator, RegisterID* dst)
+{
+    ArgumentListNode* node = m_args->m_listNode;
+    RefPtr<RegisterID> base = generator.emitNode(node);
+    node = node->m_next;
+    ASSERT(node->m_expr->isString());
+    const Identifier& ident = static_cast<StringNode*>(node->m_expr)->value();
+    node = node->m_next;
+    RefPtr<RegisterID> value = generator.emitNode(node);
+
+    ASSERT(!node->m_next);
+
+    return generator.moveToDestinationIfNeeded(dst, generator.emitDirectPutById(base.get(), ident, value.get(), PropertyNode::KnownDirect));
+}
+
+RegisterID* BytecodeIntrinsicNode::emit_intrinsic_putByIdDirectPrivate(BytecodeGenerator& generator, RegisterID* dst)
+{
+    ArgumentListNode* node = m_args->m_listNode;
+    RefPtr<RegisterID> base = generator.emitNode(node);
+    node = node->m_next;
+    ASSERT(node->m_expr->isString());
+    const Identifier* ident = generator.vm()->propertyNames->lookUpPrivateName(static_cast<StringNode*>(node->m_expr)->value());
+    ASSERT(ident);
+    node = node->m_next;
+    RefPtr<RegisterID> value = generator.emitNode(node);
+
+    ASSERT(!node->m_next);
+
+    return generator.moveToDestinationIfNeeded(dst, generator.emitDirectPutById(base.get(), *ident, value.get(), PropertyNode::KnownDirect));
+}
+
 RegisterID* BytecodeIntrinsicNode::emit_intrinsic_putByValDirect(BytecodeGenerator& generator, RegisterID* dst)
 {
     ArgumentListNode* node = m_args->m_listNode;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to