Title: [230637] trunk/Source/WebCore
Revision
230637
Author
utatane....@gmail.com
Date
2018-04-13 10:01:40 -0700 (Fri, 13 Apr 2018)

Log Message

[WebCore] Use @getByIdDirectPrivate / @putByIdDirectPrivate in WebCore JS
https://bugs.webkit.org/show_bug.cgi?id=184401

Rubber stamped by Saam Barati.

Apply bug 183970 changes to WebCore JS too. This offers solid type checking
with @getByIdDirectPrivate().

* Modules/mediastream/RTCPeerConnection.js:
(initializeRTCPeerConnection):
(getLocalStreams):
(getStreamById):
(addStream):
* Modules/mediastream/RTCPeerConnectionInternals.js:
(isRTCPeerConnection):
* Modules/streams/ReadableByteStreamController.js:
(enqueue):
(error):
(close):
(getter.byobRequest):
* Modules/streams/ReadableByteStreamInternals.js:
(privateInitializeReadableStreamBYOBReader):
(privateInitializeReadableByteStreamController):
(privateInitializeReadableStreamBYOBRequest):
(isReadableByteStreamController):
(isReadableStreamBYOBRequest):
(isReadableStreamBYOBReader):
(readableByteStreamControllerCancel):
(readableByteStreamControllerError):
(readableByteStreamControllerClose):
(readableByteStreamControllerClearPendingPullIntos):
(readableByteStreamControllerGetDesiredSize):
(readableStreamHasBYOBReader):
(readableStreamHasDefaultReader):
(readableByteStreamControllerHandleQueueDrain):
(readableByteStreamControllerPull):
(readableByteStreamControllerShouldCallPull):
(readableByteStreamControllerCallPullIfNeeded):
(readableByteStreamControllerEnqueue):
(readableByteStreamControllerEnqueueChunk):
(readableByteStreamControllerRespondWithNewView):
(readableByteStreamControllerRespond):
(readableByteStreamControllerRespondInternal):
(readableByteStreamControllerRespondInReadableState):
(readableByteStreamControllerRespondInClosedState):
(readableByteStreamControllerProcessPullDescriptors):
(readableByteStreamControllerFillDescriptorFromQueue):
(readableByteStreamControllerShiftPendingDescriptor):
(readableByteStreamControllerInvalidateBYOBRequest):
(readableByteStreamControllerCommitDescriptor):
(readableStreamFulfillReadIntoRequest):
(readableByteStreamControllerPullInto):
(readableStreamAddReadIntoRequest):
* Modules/streams/ReadableStream.js:
(initializeReadableStream):
(pipeThrough):
* Modules/streams/ReadableStreamBYOBReader.js:
(cancel):
(read):
(releaseLock):
(getter.closed):
* Modules/streams/ReadableStreamBYOBRequest.js:
(respond):
(respondWithNewView):
(getter.view):
* Modules/streams/ReadableStreamDefaultController.js:
(error):
* Modules/streams/ReadableStreamDefaultReader.js:
(cancel):
(read):
(releaseLock):
(getter.closed):
* Modules/streams/ReadableStreamInternals.js:
(privateInitializeReadableStreamDefaultReader):
(readableStreamReaderGenericInitialize):
(readableStreamDefaultControllerError):
(readableStreamPipeTo):
(readableStreamTee):
(isReadableStream):
(isReadableStreamDefaultReader):
(isReadableStreamDefaultController):
(readableStreamError):
(readableStreamDefaultControllerCallPullIfNeeded):
(readableStreamDefaultControllerGetDesiredSize):
(readableStreamReaderGenericCancel):
(readableStreamCancel):
(readableStreamDefaultControllerCancel):
(readableStreamDefaultControllerPull):
(readableStreamDefaultControllerClose):
(readableStreamClose):
(readableStreamFulfillReadRequest):
(readableStreamDefaultReaderRead):
(readableStreamAddReadRequest):
(isReadableStreamDisturbed):
(readableStreamReaderGenericRelease):
(readableStreamDefaultControllerCanCloseOrEnqueue):
(privateInitializeReadableStreamDefaultController): Deleted.
* Modules/streams/StreamInternals.js:
(validateAndNormalizeQueuingStrategy):
* Modules/streams/WritableStream.js:
(initializeWritableStream):
(abort):
(close):
(write):
(getter.closed):
(getter.ready):
(getter.state):
* Modules/streams/WritableStreamInternals.js:
(isWritableStream):
(syncWritableStreamStateWithQueue):
(errorWritableStream):
(callOrScheduleWritableStreamAdvanceQueue):
* bindings/js/JSDOMBindingInternals.js:
(mapLikeForEach):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (230636 => 230637)


--- trunk/Source/WebCore/ChangeLog	2018-04-13 16:54:12 UTC (rev 230636)
+++ trunk/Source/WebCore/ChangeLog	2018-04-13 17:01:40 UTC (rev 230637)
@@ -1,3 +1,120 @@
+2018-04-13  Yusuke Suzuki  <utatane....@gmail.com>
+
+        [WebCore] Use @getByIdDirectPrivate / @putByIdDirectPrivate in WebCore JS
+        https://bugs.webkit.org/show_bug.cgi?id=184401
+
+        Rubber stamped by Saam Barati.
+
+        Apply bug 183970 changes to WebCore JS too. This offers solid type checking
+        with @getByIdDirectPrivate().
+
+        * Modules/mediastream/RTCPeerConnection.js:
+        (initializeRTCPeerConnection):
+        (getLocalStreams):
+        (getStreamById):
+        (addStream):
+        * Modules/mediastream/RTCPeerConnectionInternals.js:
+        (isRTCPeerConnection):
+        * Modules/streams/ReadableByteStreamController.js:
+        (enqueue):
+        (error):
+        (close):
+        (getter.byobRequest):
+        * Modules/streams/ReadableByteStreamInternals.js:
+        (privateInitializeReadableStreamBYOBReader):
+        (privateInitializeReadableByteStreamController):
+        (privateInitializeReadableStreamBYOBRequest):
+        (isReadableByteStreamController):
+        (isReadableStreamBYOBRequest):
+        (isReadableStreamBYOBReader):
+        (readableByteStreamControllerCancel):
+        (readableByteStreamControllerError):
+        (readableByteStreamControllerClose):
+        (readableByteStreamControllerClearPendingPullIntos):
+        (readableByteStreamControllerGetDesiredSize):
+        (readableStreamHasBYOBReader):
+        (readableStreamHasDefaultReader):
+        (readableByteStreamControllerHandleQueueDrain):
+        (readableByteStreamControllerPull):
+        (readableByteStreamControllerShouldCallPull):
+        (readableByteStreamControllerCallPullIfNeeded):
+        (readableByteStreamControllerEnqueue):
+        (readableByteStreamControllerEnqueueChunk):
+        (readableByteStreamControllerRespondWithNewView):
+        (readableByteStreamControllerRespond):
+        (readableByteStreamControllerRespondInternal):
+        (readableByteStreamControllerRespondInReadableState):
+        (readableByteStreamControllerRespondInClosedState):
+        (readableByteStreamControllerProcessPullDescriptors):
+        (readableByteStreamControllerFillDescriptorFromQueue):
+        (readableByteStreamControllerShiftPendingDescriptor):
+        (readableByteStreamControllerInvalidateBYOBRequest):
+        (readableByteStreamControllerCommitDescriptor):
+        (readableStreamFulfillReadIntoRequest):
+        (readableByteStreamControllerPullInto):
+        (readableStreamAddReadIntoRequest):
+        * Modules/streams/ReadableStream.js:
+        (initializeReadableStream):
+        (pipeThrough):
+        * Modules/streams/ReadableStreamBYOBReader.js:
+        (cancel):
+        (read):
+        (releaseLock):
+        (getter.closed):
+        * Modules/streams/ReadableStreamBYOBRequest.js:
+        (respond):
+        (respondWithNewView):
+        (getter.view):
+        * Modules/streams/ReadableStreamDefaultController.js:
+        (error):
+        * Modules/streams/ReadableStreamDefaultReader.js:
+        (cancel):
+        (read):
+        (releaseLock):
+        (getter.closed):
+        * Modules/streams/ReadableStreamInternals.js:
+        (privateInitializeReadableStreamDefaultReader):
+        (readableStreamReaderGenericInitialize):
+        (readableStreamDefaultControllerError):
+        (readableStreamPipeTo):
+        (readableStreamTee):
+        (isReadableStream):
+        (isReadableStreamDefaultReader):
+        (isReadableStreamDefaultController):
+        (readableStreamError):
+        (readableStreamDefaultControllerCallPullIfNeeded):
+        (readableStreamDefaultControllerGetDesiredSize):
+        (readableStreamReaderGenericCancel):
+        (readableStreamCancel):
+        (readableStreamDefaultControllerCancel):
+        (readableStreamDefaultControllerPull):
+        (readableStreamDefaultControllerClose):
+        (readableStreamClose):
+        (readableStreamFulfillReadRequest):
+        (readableStreamDefaultReaderRead):
+        (readableStreamAddReadRequest):
+        (isReadableStreamDisturbed):
+        (readableStreamReaderGenericRelease):
+        (readableStreamDefaultControllerCanCloseOrEnqueue):
+        (privateInitializeReadableStreamDefaultController): Deleted.
+        * Modules/streams/StreamInternals.js:
+        (validateAndNormalizeQueuingStrategy):
+        * Modules/streams/WritableStream.js:
+        (initializeWritableStream):
+        (abort):
+        (close):
+        (write):
+        (getter.closed):
+        (getter.ready):
+        (getter.state):
+        * Modules/streams/WritableStreamInternals.js:
+        (isWritableStream):
+        (syncWritableStreamStateWithQueue):
+        (errorWritableStream):
+        (callOrScheduleWritableStreamAdvanceQueue):
+        * bindings/js/JSDOMBindingInternals.js:
+        (mapLikeForEach):
+
 2018-04-12  Antoine Quint  <grao...@apple.com>
 
         [Web Animations] Turn CSS Animations and CSS Transitions as Web Animations on by default

Modified: trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.js (230636 => 230637)


--- trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.js	2018-04-13 16:54:12 UTC (rev 230636)
+++ trunk/Source/WebCore/Modules/mediastream/RTCPeerConnection.js	2018-04-13 17:01:40 UTC (rev 230637)
@@ -40,8 +40,8 @@
         @throwTypeError("RTCPeerConnection argument must be a valid dictionary");
 
     this.@initializeWith(configuration);
-    this.@operations = [];
-    this.@localStreams = [];
+    @putByIdDirectPrivate(this, "operations", []);
+    @putByIdDirectPrivate(this, "localStreams", []);
 
     return this;
 }
@@ -53,7 +53,7 @@
     if (!@isRTCPeerConnection(this))
         throw @makeThisTypeError("RTCPeerConnection", "getLocalStreams");
 
-    return this.@localStreams.slice();
+    return @getByIdDirectPrivate(this, "localStreams").slice();
 }
 
 function getStreamById(streamIdArg)
@@ -66,9 +66,9 @@
     if (arguments.length < 1)
         @throwTypeError("Not enough arguments");
 
-    const streamId = @String(streamIdArg);
+    const streamId = @toString(streamIdArg);
 
-    return th...@localstreams.find(stream => stream.id === streamId)
+    return @getByIdDirectPrivate(this, "localStreams").find(stream => stream.id === streamId)
         || this.@getRemoteStreams().find(stream => stream.id === streamId)
         || null;
 }
@@ -86,10 +86,10 @@
     if (!(stream instanceof @MediaStream))
         @throwTypeError("Argument 1 ('stream') to RTCPeerConnection.addStream must be an instance of MediaStream");
 
-    if (th...@localstreams.find(localStream => localStream.id === stream.id))
+    if (@getByIdDirectPrivate(this, "localStreams").find(localStream => localStream.id === stream.id))
         return;
 
-    this.@localStreams.@push(stream);
+    @getByIdDirectPrivate(this, "localStreams").@push(stream);
     stream.@getTracks().forEach(track => this.@addTrack(track, stream));
 }
 
@@ -106,18 +106,18 @@
     if (!(stream instanceof @MediaStream))
         @throwTypeError("Argument 1 ('stream') to RTCPeerConnection.removeStream must be an instance of MediaStream");
 
-    const indexOfStreamToRemove = this.@localStreams.findIndex(localStream => localStream.id === stream.id);
+    const indexOfStreamToRemove = @getByIdDirectPrivate(this, "localStreams").findIndex(localStream => localStream.id === stream.id);
     if (indexOfStreamToRemove === -1)
         return;
 
     const senders = this.@getSenders();
-    this.@localStreams[indexOfStreamToRemove].@getTracks().forEach(track => {
+    @getByIdDirectPrivate(this, "localStreams")[indexOfStreamToRemove].@getTracks().forEach(track => {
         const senderForTrack = senders.find(sender => sender.track && sender.track.id === track.id);
         if (senderForTrack)
             this.@removeTrack(senderForTrack);
     });
 
-    this.@localStreams.splice(indexOfStreamToRemove, 1);
+    @getByIdDirectPrivate(this, "localStreams").splice(indexOfStreamToRemove, 1);
 }
 
 function createOffer()

Modified: trunk/Source/WebCore/Modules/mediastream/RTCPeerConnectionInternals.js (230636 => 230637)


--- trunk/Source/WebCore/Modules/mediastream/RTCPeerConnectionInternals.js	2018-04-13 16:54:12 UTC (rev 230636)
+++ trunk/Source/WebCore/Modules/mediastream/RTCPeerConnectionInternals.js	2018-04-13 17:01:40 UTC (rev 230637)
@@ -36,7 +36,7 @@
 {
     "use strict";
 
-    const operations = peerConnection.@operations;
+    const operations = @getByIdDirectPrivate(peerConnection, "operations");
 
     function runNext() {
         operations.@shift();
@@ -133,5 +133,5 @@
 {
     "use strict";
 
-    return @isObject(connection) && !!connection.@operations;
+    return @isObject(connection) && !!@getByIdDirectPrivate(connection, "operations");
 }

Modified: trunk/Source/WebCore/Modules/streams/ReadableByteStreamController.js (230636 => 230637)


--- trunk/Source/WebCore/Modules/streams/ReadableByteStreamController.js	2018-04-13 16:54:12 UTC (rev 230636)
+++ trunk/Source/WebCore/Modules/streams/ReadableByteStreamController.js	2018-04-13 17:01:40 UTC (rev 230637)
@@ -32,10 +32,10 @@
     if (!@isReadableByteStreamController(this))
         throw @makeThisTypeError("ReadableByteStreamController", "enqueue");
 
-    if (this.@closeRequested)
+    if (@getByIdDirectPrivate(this, "closeRequested"))
         @throwTypeError("ReadableByteStreamController is requested to close");
 
-    if (this.@controlledReadableStream.@state !== @streamReadable)
+    if (@getByIdDirectPrivate(@getByIdDirectPrivate(this, "controlledReadableStream"), "state") !== @streamReadable)
         @throwTypeError("ReadableStream is not readable");
 
     if (!@isObject(chunk))
@@ -54,7 +54,7 @@
     if (!@isReadableByteStreamController(this))
         throw @makeThisTypeError("ReadableByteStreamController", "error");
 
-    if (this.@controlledReadableStream.@state !== @streamReadable)
+    if (@getByIdDirectPrivate(@getByIdDirectPrivate(this, "controlledReadableStream"), "state") !== @streamReadable)
         @throwTypeError("ReadableStream is not readable");
 
     @readableByteStreamControllerError(this, error);
@@ -67,10 +67,10 @@
     if (!@isReadableByteStreamController(this))
         throw @makeThisTypeError("ReadableByteStreamController", "close");
 
-    if (this.@closeRequested)
+    if (@getByIdDirectPrivate(this, "closeRequested"))
         @throwTypeError("Close has already been requested");
 
-    if (this.@controlledReadableStream.@state !== @streamReadable)
+    if (@getByIdDirectPrivate(@getByIdDirectPrivate(this, "controlledReadableStream"), "state") !== @streamReadable)
         @throwTypeError("ReadableStream is not readable");
 
     @readableByteStreamControllerClose(this);
@@ -84,15 +84,15 @@
     if (!@isReadableByteStreamController(this))
         throw @makeGetterTypeError("ReadableByteStreamController", "byobRequest");
 
-    if (this.@byobRequest === @undefined && this.@pendingPullIntos.length) {
-        const firstDescriptor = this.@pendingPullIntos[0];
+    if (@getByIdDirectPrivate(this, "byobRequest") === @undefined && @getByIdDirectPrivate(this, "pendingPullIntos").length) {
+        const firstDescriptor = @getByIdDirectPrivate(this, "pendingPullIntos")[0];
         const view = new @Uint8Array(firstDescriptor.buffer,
             firstDescriptor.byteOffset + firstDescriptor.bytesFilled,
             firstDescriptor.byteLength - firstDescriptor.bytesFilled);
-        this.@byobRequest = new @ReadableStreamBYOBRequest(this, view);
+        @putByIdDirectPrivate(this, "byobRequest", new @ReadableStreamBYOBRequest(this, view));
     }
 
-    return this.@byobRequest;
+    return @getByIdDirectPrivate(this, "byobRequest");
 }
 
 @getter

Modified: trunk/Source/WebCore/Modules/streams/ReadableByteStreamInternals.js (230636 => 230637)


--- trunk/Source/WebCore/Modules/streams/ReadableByteStreamInternals.js	2018-04-13 16:54:12 UTC (rev 230636)
+++ trunk/Source/WebCore/Modules/streams/ReadableByteStreamInternals.js	2018-04-13 17:01:40 UTC (rev 230637)
@@ -32,13 +32,13 @@
 
     if (!@isReadableStream(stream))
         @throwTypeError("ReadableStreamBYOBReader needs a ReadableStream");
-    if (!@isReadableByteStreamController(stream.@readableStreamController))
+    if (!@isReadableByteStreamController(@getByIdDirectPrivate(stream, "readableStreamController")))
         @throwTypeError("ReadableStreamBYOBReader needs a ReadableByteStreamController");
     if (@isReadableStreamLocked(stream))
         @throwTypeError("ReadableStream is locked");
 
     @readableStreamReaderGenericInitialize(this, stream);
-    this.@readIntoRequests = [];
+    @putByIdDirectPrivate(this, "readIntoRequests", []);
 
     return this;
 }
@@ -51,22 +51,22 @@
         @throwTypeError("ReadableByteStreamController needs a ReadableStream");
 
     // readableStreamController is initialized with null value.
-    if (stream.@readableStreamController !== null)
+    if (@getByIdDirectPrivate(stream, "readableStreamController") !== null)
         @throwTypeError("ReadableStream already has a controller");
 
-    this.@controlledReadableStream = stream;
-    this.@underlyingByteSource = underlyingByteSource;
-    this.@pullAgain = false;
-    this.@pulling = false;
+    @putByIdDirectPrivate(this, "controlledReadableStream", stream);
+    @putByIdDirectPrivate(this, "underlyingByteSource", underlyingByteSource);
+    @putByIdDirectPrivate(this, "pullAgain", false);
+    @putByIdDirectPrivate(this, "pulling", false);
     @readableByteStreamControllerClearPendingPullIntos(this);
-    this.@queue = @newQueue();
-    this.@started = false;
-    this.@closeRequested = false;
+    @putByIdDirectPrivate(this, "queue", @newQueue());
+    @putByIdDirectPrivate(this, "started", false);
+    @putByIdDirectPrivate(this, "closeRequested", false);
 
     let hwm = @toNumber(highWaterMark);
     if (@isNaN(hwm) || hwm < 0)
         @throwRangeError("highWaterMark value is negative or not a number");
-    this.@strategyHWM = hwm;
+    @putByIdDirectPrivate(this, "strategyHWM", hwm);
 
     let autoAllocateChunkSize = underlyingByteSource.autoAllocateChunkSize;
     if (autoAllocateChunkSize !== @undefined) {
@@ -74,22 +74,22 @@
         if (autoAllocateChunkSize <= 0 || autoAllocateChunkSize === @Number.POSITIVE_INFINITY || autoAllocateChunkSize === @Number.NEGATIVE_INFINITY)
             @throwRangeError("autoAllocateChunkSize value is negative or equal to positive or negative infinity");
     }
-    this.@autoAllocateChunkSize = autoAllocateChunkSize;
-    this.@pendingPullIntos = [];
+    @putByIdDirectPrivate(this, "autoAllocateChunkSize", autoAllocateChunkSize);
+    @putByIdDirectPrivate(this, "pendingPullIntos", []);
 
     const controller = this;
     const startResult = @promiseInvokeOrNoopNoCatch(underlyingByteSource, "start", [this]).@then(() => {
-        controller.@started = true;
-        @assert(!controller.@pulling);
-        @assert(!controller.@pullAgain);
+        @putByIdDirectPrivate(controller, "started", true);
+        @assert(!@getByIdDirectPrivate(controller, "pulling"));
+        @assert(!@getByIdDirectPrivate(controller, "pullAgain"));
         @readableByteStreamControllerCallPullIfNeeded(controller);
     }, (error) => {
-        if (stream.@state === @streamReadable)
+        if (@getByIdDirectPrivate(stream, "state") === @streamReadable)
             @readableByteStreamControllerError(controller, error);
     });
 
-    this.@cancel = @readableByteStreamControllerCancel;
-    this.@pull = @readableByteStreamControllerPull;
+    @putByIdDirectPrivate(this, "cancel", @readableByteStreamControllerCancel);
+    @putByIdDirectPrivate(this, "pull", @readableByteStreamControllerPull);
 
     return this;
 }
@@ -98,8 +98,8 @@
 {
     "use strict";
 
-    this.@associatedReadableByteStreamController = controller;
-    this.@view = view;
+    @putByIdDirectPrivate(this, "associatedReadableByteStreamController", controller);
+    @putByIdDirectPrivate(this, "view", view);
 }
 
 function isReadableByteStreamController(controller)
@@ -108,7 +108,7 @@
 
     // Same test mechanism as in isReadableStreamDefaultController (ReadableStreamInternals.js).
     // See corresponding function for explanations.
-    return @isObject(controller) && !!controller.@underlyingByteSource;
+    return @isObject(controller) && !!@getByIdDirectPrivate(controller, "underlyingByteSource");
 }
 
 function isReadableStreamBYOBRequest(byobRequest)
@@ -117,7 +117,7 @@
 
     // Same test mechanism as in isReadableStreamDefaultController (ReadableStreamInternals.js).
     // See corresponding function for explanations.
-    return @isObject(byobRequest) && !!byobRequest.@associatedReadableByteStreamController;
+    return @isObject(byobRequest) && !!@getByIdDirectPrivate(byobRequest, "associatedReadableByteStreamController");
 }
 
 function isReadableStreamBYOBReader(reader)
@@ -127,7 +127,7 @@
     // Spec tells to return true only if reader has a readIntoRequests internal slot.
     // However, since it is a private slot, it cannot be checked using hasOwnProperty().
     // Since readIntoRequests is initialized with an empty array, the following test is ok.
-    return @isObject(reader) && !!reader.@readIntoRequests;
+    return @isObject(reader) && !!@getByIdDirectPrivate(reader, "readIntoRequests");
 }
 
 function readableByteStreamControllerCancel(controller, reason)
@@ -134,10 +134,11 @@
 {
     "use strict";
 
-    if (controller.@pendingPullIntos.length > 0)
-        controller.@pendingPullIntos[0].bytesFilled = 0;
-    controller.@queue = @newQueue();
-    return @promiseInvokeOrNoop(controller.@underlyingByteSource, "cancel", [reason]);
+    var pendingPullIntos = @getByIdDirectPrivate(controller, "pendingPullIntos");
+    if (pendingPullIntos.length > 0)
+        pendingPullIntos[0].bytesFilled = 0;
+    @putByIdDirectPrivate(controller, "queue", @newQueue());
+    return @promiseInvokeOrNoop(@getByIdDirectPrivate(controller, "underlyingByteSource"), "cancel", [reason]);
 }
 
 function readableByteStreamControllerError(controller, e)
@@ -144,10 +145,10 @@
 {
     "use strict";
 
-    @assert(controller.@controlledReadableStream.@state === @streamReadable);
+    @assert(@getByIdDirectPrivate(@getByIdDirectPrivate(controller, "controlledReadableStream"), "state") === @streamReadable);
     @readableByteStreamControllerClearPendingPullIntos(controller);
-    controller.@queue = @newQueue();
-    @readableStreamError(controller.@controlledReadableStream, e);
+    @putByIdDirectPrivate(controller, "queue", @newQueue());
+    @readableStreamError(@getByIdDirectPrivate(controller, "controlledReadableStream"), e);
 }
 
 function readableByteStreamControllerClose(controller)
@@ -154,16 +155,17 @@
 {
     "use strict";
 
-    @assert(!controller.@closeRequested);
-    @assert(controller.@controlledReadableStream.@state === @streamReadable);
+    @assert(!@getByIdDirectPrivate(controller, "closeRequested"));
+    @assert(@getByIdDirectPrivate(@getByIdDirectPrivate(controller, "controlledReadableStream"), "state") === @streamReadable);
 
-    if (controll...@queue.size > 0) {
-        controller.@closeRequested = true;
+    if (@getByIdDirectPrivate(controller, "queue").size > 0) {
+        @putByIdDirectPrivate(controller, "closeRequested", true);
         return;
     }
 
-    if (controller.@pendingPullIntos.length > 0) {
-        if (controller.@pendingPullIntos[0].bytesFilled > 0) {
+    var pendingPullIntos = @getByIdDirectPrivate(controller, "pendingPullIntos");
+    if (pendingPullIntos.length > 0) {
+        if (pendingPullIntos[0].bytesFilled > 0) {
             const e = new @TypeError("Close requested while there remain pending bytes");
             @readableByteStreamControllerError(controller, e);
             throw e;
@@ -170,7 +172,7 @@
         }
     }
 
-    @readableStreamClose(controller.@controlledReadableStream);
+    @readableStreamClose(@getByIdDirectPrivate(controller, "controlledReadableStream"));
 }
 
 function readableByteStreamControllerClearPendingPullIntos(controller)
@@ -178,21 +180,22 @@
     "use strict";
 
     @readableByteStreamControllerInvalidateBYOBRequest(controller);
-    controller.@pendingPullIntos = [];
+    @putByIdDirectPrivate(controller, "pendingPullIntos", []);
 }
 
 function readableByteStreamControllerGetDesiredSize(controller)
 {
-   "use strict";
+    "use strict";
 
-   const stream = controller.@controlledReadableStream;
+    const stream = @getByIdDirectPrivate(controller, "controlledReadableStream");
+    const state = @getByIdDirectPrivate(stream, "state");
 
-   if (stream.@state === @streamErrored)
-       return null;
-   if (stream.@state === @streamClosed)
-       return 0;
+    if (state === @streamErrored)
+        return null;
+    if (state === @streamClosed)
+        return 0;
 
-   return controller.@strategyHWM - controll...@queue.size;
+    return @getByIdDirectPrivate(controller, "strategyHWM") - @getByIdDirectPrivate(controller, "queue").size;
 }
 
 function readableStreamHasBYOBReader(stream)
@@ -199,7 +202,8 @@
 {
     "use strict";
 
-    return stream.@reader !== @undefined && @isReadableStreamBYOBReader(stream.@reader);
+    const reader = @getByIdDirectPrivate(stream, "reader");
+    return reader !== @undefined && @isReadableStreamBYOBReader(reader);
 }
 
 function readableStreamHasDefaultReader(stream)
@@ -206,7 +210,8 @@
 {
     "use strict";
 
-    return stream.@reader !== @undefined && @isReadableStreamDefaultReader(stream.@reader);
+    const reader = @getByIdDirectPrivate(stream, "reader");
+    return reader !== @undefined && @isReadableStreamDefaultReader(reader);
 }
 
 function readableByteStreamControllerHandleQueueDrain(controller) {
@@ -213,9 +218,9 @@
 
     "use strict";
 
-    @assert(controller.@controlledReadableStream.@state === @streamReadable);
-    if (!controll...@queue.size && controller.@closeRequested)
-        @readableStreamClose(controller.@controlledReadableStream);
+    @assert(@getByIdDirectPrivate(@getByIdDirectPrivate(controller, "controlledReadableStream"), "state") === @streamReadable);
+    if (!@getByIdDirectPrivate(controller, "queue").size && @getByIdDirectPrivate(controller, "closeRequested"))
+        @readableStreamClose(@getByIdDirectPrivate(controller, "controlledReadableStream"));
     else
         @readableByteStreamControllerCallPullIfNeeded(controller);
 }
@@ -224,13 +229,13 @@
 {
     "use strict";
 
-    const stream = controller.@controlledReadableStream;
+    const stream = @getByIdDirectPrivate(controller, "controlledReadableStream");
     @assert(@readableStreamHasDefaultReader(stream));
 
-    if (controll...@queue.size > 0) {
-        @assert(stream.@reader.@readRequests.length === 0);
-        const entry = controller.@queue.content.@shift();
-        controll...@queue.size -= entry.byteLength;
+    if (@getByIdDirectPrivate(controller, "queue").size > 0) {
+        @assert(@getByIdDirectPrivate(@getByIdDirectPrivate(stream, "reader"), "readRequests").length === 0);
+        const entry = @getByIdDirectPrivate(controller, "queue").content.@shift();
+        @getByIdDirectPrivate(controller, "queue").size -= entry.byteLength;
         @readableByteStreamControllerHandleQueueDrain(controller);
         let view;
         try {
@@ -241,10 +246,10 @@
         return @Promise.@resolve({value: view, done: false});
     }
 
-    if (controller.@autoAllocateChunkSize !== @undefined) {
+    if (@getByIdDirectPrivate(controller, "autoAllocateChunkSize") !== @undefined) {
         let buffer;
         try {
-            buffer = new @ArrayBuffer(controller.@autoAllocateChunkSize);
+            buffer = new @ArrayBuffer(@getByIdDirectPrivate(controller, "autoAllocateChunkSize"));
         } catch (error) {
             return @Promise.@reject(error);
         }
@@ -251,13 +256,13 @@
         const pullIntoDescriptor = {
             buffer,
             byteOffset: 0,
-            byteLength: controller.@autoAllocateChunkSize,
+            byteLength: @getByIdDirectPrivate(controller, "autoAllocateChunkSize"),
             bytesFilled: 0,
             elementSize: 1,
             ctor: @Uint8Array,
             readerType: 'default'
         };
-        controller.@pendingPullIntos.@push(pullIntoDescriptor);
+        @getByIdDirectPrivate(controller, "pendingPullIntos").@push(pullIntoDescriptor);
     }
 
     const promise = @readableStreamAddReadRequest(stream);
@@ -269,17 +274,17 @@
 {
     "use strict";
 
-    const stream = controller.@controlledReadableStream;
+    const stream = @getByIdDirectPrivate(controller, "controlledReadableStream");
 
-    if (stream.@state !== @streamReadable)
+    if (@getByIdDirectPrivate(stream, "state") !== @streamReadable)
         return false;
-    if (controller.@closeRequested)
+    if (@getByIdDirectPrivate(controller, "closeRequested"))
         return false;
-    if (!controller.@started)
+    if (!@getByIdDirectPrivate(controller, "started"))
         return false;
-    if (@readableStreamHasDefaultReader(stream) && stream.@reader.@readRequests.length > 0)
+    if (@readableStreamHasDefaultReader(stream) && @getByIdDirectPrivate(@getByIdDirectPrivate(stream, "reader"), "readRequests").length > 0)
         return true;
-    if (@readableStreamHasBYOBReader(stream) && stream.@reader.@readIntoRequests.length > 0)
+    if (@readableStreamHasBYOBReader(stream) && @getByIdDirectPrivate(@getByIdDirectPrivate(stream, "reader"), "readIntoRequests").length > 0)
         return true;
     if (@readableByteStreamControllerGetDesiredSize(controller) > 0)
         return true;
@@ -293,21 +298,21 @@
     if (!@readableByteStreamControllerShouldCallPull(controller))
         return;
 
-    if (controller.@pulling) {
-        controller.@pullAgain = true;
+    if (@getByIdDirectPrivate(controller, "pulling")) {
+        @putByIdDirectPrivate(controller, "pullAgain", true);
         return;
     }
 
-    @assert(!controller.@pullAgain);
-    controller.@pulling = true;
-    @promiseInvokeOrNoop(controller.@underlyingByteSource, "pull", [controller]).@then(() => {
-        controller.@pulling = false;
-        if (controller.@pullAgain) {
-            controller.@pullAgain = false;
+    @assert(!@getByIdDirectPrivate(controller, "pullAgain"));
+    @putByIdDirectPrivate(controller, "pulling", true);
+    @promiseInvokeOrNoop(@getByIdDirectPrivate(controller, "underlyingByteSource"), "pull", [controller]).@then(() => {
+        @putByIdDirectPrivate(controller, "pulling", false);
+        if (@getByIdDirectPrivate(controller, "pullAgain")) {
+            @putByIdDirectPrivate(controller, "pullAgain", false);
             @readableByteStreamControllerCallPullIfNeeded(controller);
         }
     }, (error) => {
-        if (controller.@controlledReadableStream.@state === @streamReadable)
+        if (@getByIdDirectPrivate(@getByIdDirectPrivate(controller, "controlledReadableStream"), "state") === @streamReadable)
             @readableByteStreamControllerError(controller, error);
     });
 }
@@ -327,9 +332,9 @@
 {
     "use strict";
 
-    const stream = controller.@controlledReadableStream;
-    @assert(!controller.@closeRequested);
-    @assert(stream.@state === @streamReadable);
+    const stream = @getByIdDirectPrivate(controller, "controlledReadableStream");
+    @assert(!@getByIdDirectPrivate(controller, "closeRequested"));
+    @assert(@getByIdDirectPrivate(stream, "state") === @streamReadable);
     const buffer = chunk.buffer;
     const byteOffset = chunk.byteOffset;
     const byteLength = chunk.byteLength;
@@ -336,10 +341,10 @@
     const transferredBuffer = @transferBufferToCurrentRealm(buffer);
 
     if (@readableStreamHasDefaultReader(stream)) {
-        if (!stream.@reader.@readRequests.length)
+        if (!@getByIdDirectPrivate(@getByIdDirectPrivate(stream, "reader"), "readRequests").length)
             @readableByteStreamControllerEnqueueChunk(controller, transferredBuffer, byteOffset, byteLength);
         else {
-            @assert(!controller.@queue.content.length);
+            @assert(!@getByIdDirectPrivate(controller, "queue").content.length);
             let transferredView = new @Uint8Array(transferredBuffer, byteOffset, byteLength);
             @readableStreamFulfillReadRequest(stream, transferredView, false);
         }
@@ -361,12 +366,12 @@
 {
     "use strict";
 
-    controller.@queue.content.@push({
+    @getByIdDirectPrivate(controller, "queue").content.@push({
         buffer: buffer,
         byteOffset: byteOffset,
         byteLength: byteLength
     });
-    controll...@queue.size += byteLength;
+    @getByIdDirectPrivate(controller, "queue").size += byteLength;
 }
 
 function readableByteStreamControllerRespondWithNewView(controller, view)
@@ -373,9 +378,9 @@
 {
     "use strict";
 
-    @assert(controller.@pendingPullIntos.length > 0);
+    @assert(@getByIdDirectPrivate(controller, "pendingPullIntos").length > 0);
 
-    let firstDescriptor = controller.@pendingPullIntos[0];
+    let firstDescriptor = @getByIdDirectPrivate(controller, "pendingPullIntos")[0];
 
     if (firstDescriptor.byteOffset + firstDescriptor.bytesFilled !== view.byteOffset)
         @throwRangeError("Invalid value for view.byteOffset");
@@ -396,7 +401,7 @@
     if (@isNaN(bytesWritten) || bytesWritten === @Number.POSITIVE_INFINITY || bytesWritten < 0 )
         @throwRangeError("bytesWritten has an incorrect value");
 
-    @assert(controller.@pendingPullIntos.length > 0);
+    @assert(@getByIdDirectPrivate(controller, "pendingPullIntos").length > 0);
 
     @readableByteStreamControllerRespondInternal(controller, bytesWritten);
 }
@@ -405,15 +410,15 @@
 {
     "use strict";
 
-    let firstDescriptor = controller.@pendingPullIntos[0];
-    let stream = controller.@controlledReadableStream;
+    let firstDescriptor = @getByIdDirectPrivate(controller, "pendingPullIntos")[0];
+    let stream = @getByIdDirectPrivate(controller, "controlledReadableStream");
 
-    if (stream.@state === @streamClosed) {
+    if (@getByIdDirectPrivate(stream, "state") === @streamClosed) {
         if (bytesWritten !== 0)
             @throwTypeError("bytesWritten is different from 0 even though stream is closed");
         @readableByteStreamControllerRespondInClosedState(controller, firstDescriptor);
     } else {
-        @assert(stream.@state === @streamReadable);
+        @assert(@getByIdDirectPrivate(stream, "state") === @streamReadable);
         @readableByteStreamControllerRespondInReadableState(controller, bytesWritten, firstDescriptor);
     }
 }
@@ -425,7 +430,7 @@
     if (pullIntoDescriptor.bytesFilled + bytesWritten > pullIntoDescriptor.byteLength)
         @throwRangeError("bytesWritten value is too great");
 
-    @assert(controller.@pendingPullIntos.length === 0 || controller.@pendingPullIntos[0] === pullIntoDescriptor);
+    @assert(@getByIdDirectPrivate(controller, "pendingPullIntos").length === 0 || @getByIdDirectPrivate(controller, "pendingPullIntos")[0] === pullIntoDescriptor);
     @readableByteStreamControllerInvalidateBYOBRequest(controller);
     pullIntoDescriptor.bytesFilled += bytesWritten;
 
@@ -443,7 +448,7 @@
 
     pullIntoDescriptor.buffer = @transferBufferToCurrentRealm(pullIntoDescriptor.buffer);
     pullIntoDescriptor.bytesFilled -= remainderSize;
-    @readableByteStreamControllerCommitDescriptor(controller.@controlledReadableStream, pullIntoDescriptor);
+    @readableByteStreamControllerCommitDescriptor(@getByIdDirectPrivate(controller, "controlledReadableStream"), pullIntoDescriptor);
     @readableByteStreamControllerProcessPullDescriptors(controller);
 }
 
@@ -454,10 +459,10 @@
     firstDescriptor.buffer = @transferBufferToCurrentRealm(firstDescriptor.buffer);
     @assert(firstDescriptor.bytesFilled === 0);
 
-    if (@readableStreamHasBYOBReader(controller.@controlledReadableStream)) {
-        while (controller.@controlledReadableStream.@reader.@readIntoRequests.length > 0) {
+    if (@readableStreamHasBYOBReader(@getByIdDirectPrivate(controller, "controlledReadableStream"))) {
+        while (@getByIdDirectPrivate(@getByIdDirectPrivate(@getByIdDirectPrivate(controller, "controlledReadableStream"), "reader"), "readIntoRequests").length > 0) {
             let pullIntoDescriptor = @readableByteStreamControllerShiftPendingDescriptor(controller);
-            @readableByteStreamControllerCommitDescriptor(controller.@controlledReadableStream, pullIntoDescriptor);
+            @readableByteStreamControllerCommitDescriptor(@getByIdDirectPrivate(controller, "controlledReadableStream"), pullIntoDescriptor);
         }
     }
 }
@@ -467,14 +472,14 @@
 {
     "use strict";
 
-    @assert(!controller.@closeRequested);
-    while (controller.@pendingPullIntos.length > 0) {
-        if (controll...@queue.size === 0)
+    @assert(!@getByIdDirectPrivate(controller, "closeRequested"));
+    while (@getByIdDirectPrivate(controller, "pendingPullIntos").length > 0) {
+        if (@getByIdDirectPrivate(controller, "queue").size === 0)
             return;
-        let pullIntoDescriptor = controller.@pendingPullIntos[0];
+        let pullIntoDescriptor = @getByIdDirectPrivate(controller, "pendingPullIntos")[0];
         if (@readableByteStreamControllerFillDescriptorFromQueue(controller, pullIntoDescriptor)) {
             @readableByteStreamControllerShiftPendingDescriptor(controller);
-            @readableByteStreamControllerCommitDescriptor(controller.@controlledReadableStream, pullIntoDescriptor);
+            @readableByteStreamControllerCommitDescriptor(@getByIdDirectPrivate(controller, "controlledReadableStream"), pullIntoDescriptor);
         }
     }
 }
@@ -485,8 +490,8 @@
     "use strict";
 
     const currentAlignedBytes = pullIntoDescriptor.bytesFilled - (pullIntoDescriptor.bytesFilled % pullIntoDescriptor.elementSize);
-    const maxBytesToCopy = controll...@queue.size < pullIntoDescriptor.byteLength - pullIntoDescriptor.bytesFilled ?
-                controll...@queue.size : pullIntoDescriptor.byteLength - pullIntoDescriptor.bytesFilled;
+    const maxBytesToCopy = @getByIdDirectPrivate(controller, "queue").size < pullIntoDescriptor.byteLength - pullIntoDescriptor.bytesFilled ?
+                @getByIdDirectPrivate(controller, "queue").size : pullIntoDescriptor.byteLength - pullIntoDescriptor.bytesFilled;
     const maxBytesFilled = pullIntoDescriptor.bytesFilled + maxBytesToCopy;
     const maxAlignedBytes = maxBytesFilled - (maxBytesFilled % pullIntoDescriptor.elementSize);
     let totalBytesToCopyRemaining = maxBytesToCopy;
@@ -498,7 +503,7 @@
     }
 
     while (totalBytesToCopyRemaining > 0) {
-        let headOfQueue = controller.@queue.content[0];
+        let headOfQueue = @getByIdDirectPrivate(controller, "queue").content[0];
         const bytesToCopy = totalBytesToCopyRemaining < headOfQueue.byteLength ? totalBytesToCopyRemaining : headOfQueue.byteLength;
         // Copy appropriate part of pullIntoDescriptor.buffer to headOfQueue.buffer.
         // Remark: this implementation is not completely aligned on the definition of CopyDataBlockBytes
@@ -509,14 +514,14 @@
         new @Uint8Array(pullIntoDescriptor.buffer).set(new @Uint8Array(headOfQueue.buffer, headOfQueue.byteOffset, bytesToCopy), destStart);
 
         if (headOfQueue.byteLength === bytesToCopy)
-            controller.@queue.content.@shift();
+            @getByIdDirectPrivate(controller, "queue").content.@shift();
         else {
             headOfQueue.byteOffset += bytesToCopy;
             headOfQueue.byteLength -= bytesToCopy;
         }
 
-        controll...@queue.size -= bytesToCopy;
-        @assert(controller.@pendingPullIntos.length === 0 || controller.@pendingPullIntos[0] === pullIntoDescriptor);
+        @getByIdDirectPrivate(controller, "queue").size -= bytesToCopy;
+        @assert(@getByIdDirectPrivate(controller, "pendingPullIntos").length === 0 || @getByIdDirectPrivate(controller, "pendingPullIntos")[0] === pullIntoDescriptor);
         @readableByteStreamControllerInvalidateBYOBRequest(controller);
         pullIntoDescriptor.bytesFilled += bytesToCopy;
         totalBytesToCopyRemaining -= bytesToCopy;
@@ -523,7 +528,7 @@
     }
 
     if (!ready) {
-        @assert(controll...@queue.size === 0);
+        @assert(@getByIdDirectPrivate(controller, "queue").size === 0);
         @assert(pullIntoDescriptor.bytesFilled > 0);
         @assert(pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize);
     }
@@ -536,7 +541,7 @@
 {
     "use strict";
 
-    let descriptor = controller.@pendingPullIntos.@shift();
+    let descriptor = @getByIdDirectPrivate(controller, "pendingPullIntos").@shift();
     @readableByteStreamControllerInvalidateBYOBRequest(controller);
     return descriptor;
 }
@@ -545,11 +550,12 @@
 {
     "use strict";
 
-    if (controller.@byobRequest === @undefined)
+    if (@getByIdDirectPrivate(controller, "byobRequest") === @undefined)
         return;
-    controller.@byobRequest.@associatedReadableByteStreamController = @undefined;
-    controller.@byobRequest.@view = @undefined;
-    controller.@byobRequest = @undefined;
+    const byobRequest = @getByIdDirectPrivate(controller, "byobRequest");
+    @putByIdDirectPrivate(byobRequest, "associatedReadableByteStreamController", @undefined);
+    @putByIdDirectPrivate(byobRequest, "view", @undefined);
+    @putByIdDirectPrivate(controller, "byobRequest", @undefined);
 }
 
 // Spec name: readableByteStreamControllerCommitPullIntoDescriptor (shortened for readability).
@@ -557,9 +563,9 @@
 {
     "use strict";
 
-    @assert(stream.@state !== @streamErrored);
+    @assert(@getByIdDirectPrivate(stream, "state") !== @streamErrored);
     let done = false;
-    if (stream.@state === @streamClosed) {
+    if (@getByIdDirectPrivate(stream, "state") === @streamClosed) {
         @assert(!pullIntoDescriptor.bytesFilled);
         done = true;
     }
@@ -587,7 +593,7 @@
 {
     "use strict";
 
-    stream.@reader.@readIntoRequests.@shift().@resolve.@call(@undefined, {value: chunk, done: done});
+    @getByIdDirectPrivate(@getByIdDirectPrivate(stream, "reader"), "readIntoRequests").@shift().@resolve.@call(@undefined, {value: chunk, done: done});
 }
 
 function readableStreamBYOBReaderRead(reader, view)
@@ -594,14 +600,14 @@
 {
     "use strict";
 
-    const stream = reader.@ownerReadableStream;
+    const stream = @getByIdDirectPrivate(reader, "ownerReadableStream");
     @assert(!!stream);
 
-    stream.@disturbed = true;
-    if (stream.@state === @streamErrored)
-        return @Promise.@reject(stream.@storedError);
+    @putByIdDirectPrivate(stream, "disturbed", true);
+    if (@getByIdDirectPrivate(stream, "state") === @streamErrored)
+        return @Promise.@reject(@getByIdDirectPrivate(stream, "storedError"));
 
-    return @readableByteStreamControllerPullInto(stream.@readableStreamController, view);
+    return @readableByteStreamControllerPullInto(@getByIdDirectPrivate(stream, "readableStreamController"), view);
 }
 
 function readableByteStreamControllerPullInto(controller, view)
@@ -608,7 +614,7 @@
 {
     "use strict";
 
-    const stream = controller.@controlledReadableStream;
+    const stream = @getByIdDirectPrivate(controller, "controlledReadableStream");
     let elementSize = 1;
     // Spec describes that in the case where view is a TypedArray, elementSize
     // should be set to the size of an element (e.g. 2 for UInt16Array). For
@@ -641,24 +647,24 @@
         readerType: 'byob'
     };
 
-    if (controller.@pendingPullIntos.length) {
+    if (@getByIdDirectPrivate(controller, "pendingPullIntos").length) {
         pullIntoDescriptor.buffer = @transferBufferToCurrentRealm(pullIntoDescriptor.buffer);
-        controller.@pendingPullIntos.@push(pullIntoDescriptor);
+        @getByIdDirectPrivate(controller, "pendingPullIntos").@push(pullIntoDescriptor);
         return @readableStreamAddReadIntoRequest(stream);
     }
 
-    if (stream.@state === @streamClosed) {
+    if (@getByIdDirectPrivate(stream, "state") === @streamClosed) {
         const emptyView = new ctor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, 0);
         return @Promise.@resolve({ value: emptyView, done: true });
     }
 
-    if (controll...@queue.size > 0) {
+    if (@getByIdDirectPrivate(controller, "queue").size > 0) {
         if (@readableByteStreamControllerFillDescriptorFromQueue(controller, pullIntoDescriptor)) {
             const filledView = @readableByteStreamControllerConvertDescriptor(pullIntoDescriptor);
             @readableByteStreamControllerHandleQueueDrain(controller);
             return @Promise.@resolve({ value: filledView, done: false });
         }
-        if (controller.@closeRequested) {
+        if (@getByIdDirectPrivate(controller, "closeRequested")) {
             const e = new @TypeError("Closing stream has been requested");
             @readableByteStreamControllerError(controller, e);
             return @Promise.@reject(e);
@@ -666,7 +672,7 @@
     }
 
     pullIntoDescriptor.buffer = @transferBufferToCurrentRealm(pullIntoDescriptor.buffer);
-    controller.@pendingPullIntos.@push(pullIntoDescriptor);
+    @getByIdDirectPrivate(controller, "pendingPullIntos").@push(pullIntoDescriptor);
     const promise = @readableStreamAddReadIntoRequest(stream);
     @readableByteStreamControllerCallPullIfNeeded(controller);
     return promise;
@@ -676,11 +682,11 @@
 {
     "use strict";
 
-    @assert(@isReadableStreamBYOBReader(stream.@reader));
-    @assert(stream.@state === @streamReadable || stream.@state === @streamClosed);
+    @assert(@isReadableStreamBYOBReader(@getByIdDirectPrivate(stream, "reader")));
+    @assert(@getByIdDirectPrivate(stream, "state") === @streamReadable || @getByIdDirectPrivate(stream, "state") === @streamClosed);
 
     const readRequest = @newPromiseCapability(@Promise);
-    stream.@reader.@readIntoRequests.@push(readRequest);
+    @getByIdDirectPrivate(@getByIdDirectPrivate(stream, "reader"), "readIntoRequests").@push(readRequest);
 
     return readRequest.@promise;
 }

Modified: trunk/Source/WebCore/Modules/streams/ReadableStream.js (230636 => 230637)


--- trunk/Source/WebCore/Modules/streams/ReadableStream.js	2018-04-13 16:54:12 UTC (rev 230636)
+++ trunk/Source/WebCore/Modules/streams/ReadableStream.js	2018-04-13 17:01:40 UTC (rev 230637)
@@ -41,15 +41,15 @@
     if (strategy !== @undefined && !@isObject(strategy))
         @throwTypeError("ReadableStream constructor takes an object as second argument, if any");
 
-    this.@state = @streamReadable;
-    this.@reader = @undefined;
-    this.@storedError = @undefined;
-    this.@disturbed = false;
+    @putByIdDirectPrivate(this, "state", @streamReadable);
+    @putByIdDirectPrivate(this, "reader", @undefined);
+    @putByIdDirectPrivate(this, "storedError", @undefined);
+    @putByIdDirectPrivate(this, "disturbed", false);
     // Initialized with null value to enable distinction with undefined case.
-    this.@readableStreamController = null;
+    @putByIdDirectPrivate(this, "readableStreamController", null);
 
     const type = underlyingSource.type;
-    const typeString = @String(type);
+    const typeString = @toString(type);
 
     if (typeString === "bytes") {
         if (!@readableByteStreamAPIEnabled())
@@ -61,11 +61,11 @@
             @throwRangeError("Strategy for a ReadableByteStreamController cannot have a size");
 
         let readableByteStreamControllerConstructor = @ReadableByteStreamController;
-        this.@readableStreamController = new @ReadableByteStreamController(this, underlyingSource, strategy.highWaterMark);
+        @putByIdDirectPrivate(this, "readableStreamController", new @ReadableByteStreamController(this, underlyingSource, strategy.highWaterMark));
     } else if (type === @undefined) {
         if (strategy.highWaterMark === @undefined)
             strategy.highWaterMark = 1;
-        this.@readableStreamController = new @ReadableStreamDefaultController(this, underlyingSource, strategy.size, strategy.highWaterMark);
+        @putByIdDirectPrivate(this, "readableStreamController", new @ReadableStreamDefaultController(this, underlyingSource, strategy.size, strategy.highWaterMark));
     } else
         @throwRangeError("Invalid type for underlying source");
 
@@ -113,7 +113,7 @@
     const readable = streams.readable;
     const promise = this.pipeTo(writable, options);
     if (@isPromise(promise))
-        promise.@promiseIsHandled = true;
+        @putByIdDirectPrivate(promise, "promiseIsHandled", true);
     return readable;
 }
 

Modified: trunk/Source/WebCore/Modules/streams/ReadableStreamBYOBReader.js (230636 => 230637)


--- trunk/Source/WebCore/Modules/streams/ReadableStreamBYOBReader.js	2018-04-13 16:54:12 UTC (rev 230636)
+++ trunk/Source/WebCore/Modules/streams/ReadableStreamBYOBReader.js	2018-04-13 17:01:40 UTC (rev 230637)
@@ -31,7 +31,7 @@
     if (!@isReadableStreamBYOBReader(this))
         return @Promise.@reject(@makeThisTypeError("ReadableStreamBYOBReader", "cancel"));
 
-    if (!this.@ownerReadableStream)
+    if (!@getByIdDirectPrivate(this, "ownerReadableStream"))
         return @Promise.@reject(new @TypeError("cancel() called on a reader owned by no readable stream"));
 
     return @readableStreamReaderGenericCancel(this, reason);
@@ -44,7 +44,7 @@
     if (!@isReadableStreamBYOBReader(this))
         return @Promise.@reject(@makeThisTypeError("ReadableStreamBYOBReader", "read"));
 
-    if (!this.@ownerReadableStream)
+    if (!@getByIdDirectPrivate(this, "ownerReadableStream"))
         return @Promise.@reject(new @TypeError("read() called on a reader owned by no readable stream"));
 
     if (!@isObject(view))
@@ -66,10 +66,10 @@
     if (!@isReadableStreamBYOBReader(this))
         throw @makeThisTypeError("ReadableStreamBYOBReader", "releaseLock");
 
-    if (!this.@ownerReadableStream)
+    if (!@getByIdDirectPrivate(this, "ownerReadableStream"))
         return;
 
-    if (this.@readIntoRequests.length)
+    if (@getByIdDirectPrivate(this, "readIntoRequests").length)
         @throwTypeError("There are still pending read requests, cannot release the lock");
 
     @readableStreamReaderGenericRelease(this);
@@ -83,5 +83,5 @@
     if (!@isReadableStreamBYOBReader(this))
         return @Promise.@reject(@makeGetterTypeError("ReadableStreamBYOBReader", "closed"));
 
-    return this.@closedPromiseCapability.@promise;
+    return @getByIdDirectPrivate(this, "closedPromiseCapability").@promise;
 }

Modified: trunk/Source/WebCore/Modules/streams/ReadableStreamBYOBRequest.js (230636 => 230637)


--- trunk/Source/WebCore/Modules/streams/ReadableStreamBYOBRequest.js	2018-04-13 16:54:12 UTC (rev 230636)
+++ trunk/Source/WebCore/Modules/streams/ReadableStreamBYOBRequest.js	2018-04-13 17:01:40 UTC (rev 230637)
@@ -32,10 +32,10 @@
     if (!@isReadableStreamBYOBRequest(this))
         throw @makeThisTypeError("ReadableStreamBYOBRequest", "respond");
 
-    if (this.@associatedReadableByteStreamController === @undefined)
+    if (@getByIdDirectPrivate(this, "associatedReadableByteStreamController") === @undefined)
         @throwTypeError("ReadableStreamBYOBRequest.associatedReadableByteStreamController is undefined");
 
-    return @readableByteStreamControllerRespond(this.@associatedReadableByteStreamController, bytesWritten);
+    return @readableByteStreamControllerRespond(@getByIdDirectPrivate(this, "associatedReadableByteStreamController"), bytesWritten);
 }
 
 function respondWithNewView(view)
@@ -45,7 +45,7 @@
     if (!@isReadableStreamBYOBRequest(this))
         throw @makeThisTypeError("ReadableStreamBYOBRequest", "respond");
 
-    if (this.@associatedReadableByteStreamController === @undefined)
+    if (@getByIdDirectPrivate(this, "associatedReadableByteStreamController") === @undefined)
         @throwTypeError("ReadableStreamBYOBRequest.associatedReadableByteStreamController is undefined");
 
     if (!@isObject(view))
@@ -54,7 +54,7 @@
     if (!@ArrayBuffer.@isView(view))
         @throwTypeError("Provided view is not an ArrayBufferView");
 
-    return @readableByteStreamControllerRespondWithNewView(this.@associatedReadableByteStreamController, view);
+    return @readableByteStreamControllerRespondWithNewView(@getByIdDirectPrivate(this, "associatedReadableByteStreamController"), view);
 }
 
 @getter
@@ -65,5 +65,5 @@
     if (!@isReadableStreamBYOBRequest(this))
         throw @makeGetterTypeError("ReadableStreamBYOBRequest", "view");
 
-    return this.@view;
+    return @getByIdDirectPrivate(this, "view");
 }

Modified: trunk/Source/WebCore/Modules/streams/ReadableStreamDefaultController.js (230636 => 230637)


--- trunk/Source/WebCore/Modules/streams/ReadableStreamDefaultController.js	2018-04-13 16:54:12 UTC (rev 230636)
+++ trunk/Source/WebCore/Modules/streams/ReadableStreamDefaultController.js	2018-04-13 17:01:40 UTC (rev 230637)
@@ -45,7 +45,7 @@
     if (!@isReadableStreamDefaultController(this))
         throw @makeThisTypeError("ReadableStreamDefaultController", "error");
 
-    if (this.@controlledReadableStream.@state !== @streamReadable)
+    if (@getByIdDirectPrivate(@getByIdDirectPrivate(this, "controlledReadableStream"), "state") !== @streamReadable)
         @throwTypeError("ReadableStream is not readable");
 
     @readableStreamDefaultControllerError(this, error);

Modified: trunk/Source/WebCore/Modules/streams/ReadableStreamDefaultReader.js (230636 => 230637)


--- trunk/Source/WebCore/Modules/streams/ReadableStreamDefaultReader.js	2018-04-13 16:54:12 UTC (rev 230636)
+++ trunk/Source/WebCore/Modules/streams/ReadableStreamDefaultReader.js	2018-04-13 17:01:40 UTC (rev 230637)
@@ -32,7 +32,7 @@
     if (!@isReadableStreamDefaultReader(this))
         return @Promise.@reject(@makeThisTypeError("ReadableStreamDefaultReader", "cancel"));
 
-    if (!this.@ownerReadableStream)
+    if (!@getByIdDirectPrivate(this, "ownerReadableStream"))
         return @Promise.@reject(new @TypeError("cancel() called on a reader owned by no readable stream"));
 
     return @readableStreamReaderGenericCancel(this, reason);
@@ -44,7 +44,7 @@
 
     if (!@isReadableStreamDefaultReader(this))
         return @Promise.@reject(@makeThisTypeError("ReadableStreamDefaultReader", "read"));
-    if (!this.@ownerReadableStream)
+    if (!@getByIdDirectPrivate(this, "ownerReadableStream"))
         return @Promise.@reject(new @TypeError("read() called on a reader owned by no readable stream"));
 
     return @readableStreamDefaultReaderRead(this);
@@ -57,10 +57,10 @@
     if (!@isReadableStreamDefaultReader(this))
         throw @makeThisTypeError("ReadableStreamDefaultReader", "releaseLock");
 
-    if (!this.@ownerReadableStream)
+    if (!@getByIdDirectPrivate(this, "ownerReadableStream"))
         return;
 
-    if (this.@readRequests.length)
+    if (@getByIdDirectPrivate(this, "readRequests").length)
         @throwTypeError("There are still pending read requests, cannot release the lock");
 
     @readableStreamReaderGenericRelease(this);
@@ -74,5 +74,5 @@
     if (!@isReadableStreamDefaultReader(this))
         return @Promise.@reject(@makeGetterTypeError("ReadableStreamDefaultReader", "closed"));
 
-    return this.@closedPromiseCapability.@promise;
+    return @getByIdDirectPrivate(this, "closedPromiseCapability").@promise;
 }

Modified: trunk/Source/WebCore/Modules/streams/ReadableStreamInternals.js (230636 => 230637)


--- trunk/Source/WebCore/Modules/streams/ReadableStreamInternals.js	2018-04-13 16:54:12 UTC (rev 230636)
+++ trunk/Source/WebCore/Modules/streams/ReadableStreamInternals.js	2018-04-13 17:01:40 UTC (rev 230637)
@@ -37,7 +37,7 @@
        @throwTypeError("ReadableStream is locked");
 
     @readableStreamReaderGenericInitialize(this, stream);
-    this.@readRequests = [];
+    @putByIdDirectPrivate(this, "readRequests", []);
 
     return this;
 }
@@ -46,15 +46,15 @@
 {
     "use strict";
 
-    reader.@ownerReadableStream = stream;
-    stream.@reader = reader;
-    if (stream.@state === @streamReadable)
-        reader.@closedPromiseCapability = @newPromiseCapability(@Promise);
-    else if (stream.@state === @streamClosed)
-        reader.@closedPromiseCapability = { @promise: @Promise.@resolve() };
+    @putByIdDirectPrivate(reader, "ownerReadableStream", stream);
+    @putByIdDirectPrivate(stream, "reader", reader);
+    if (@getByIdDirectPrivate(stream, "state") === @streamReadable)
+        @putByIdDirectPrivate(reader, "closedPromiseCapability", @newPromiseCapability(@Promise));
+    else if (@getByIdDirectPrivate(stream, "state") === @streamClosed)
+        @putByIdDirectPrivate(reader, "closedPromiseCapability", { @promise: @Promise.@resolve() });
     else {
-        @assert(stream.@state === @streamErrored);
-        reader.@closedPromiseCapability = { @promise: @newHandledRejectedPromise(stream.@storedError) };
+        @assert(@getByIdDirectPrivate(stream, "state") === @streamErrored);
+        @putByIdDirectPrivate(reader, "closedPromiseCapability", { @promise: @newHandledRejectedPromise(@getByIdDirectPrivate(stream, "storedError")) });
     }
 }
 
@@ -66,32 +66,32 @@
         @throwTypeError("ReadableStreamDefaultController needs a ReadableStream");
 
     // readableStreamController is initialized with null value.
-    if (stream.@readableStreamController !== null)
+    if (@getByIdDirectPrivate(stream, "readableStreamController") !== null)
         @throwTypeError("ReadableStream already has a controller");
 
-    this.@controlledReadableStream = stream;
-    this.@underlyingSource = underlyingSource;
-    this.@queue = @newQueue();
-    this.@started = false;
-    this.@closeRequested = false;
-    this.@pullAgain = false;
-    this.@pulling = false;
-    this.@strategy = @validateAndNormalizeQueuingStrategy(size, highWaterMark);
+    @putByIdDirectPrivate(this, "controlledReadableStream", stream);
+    @putByIdDirectPrivate(this, "underlyingSource", underlyingSource);
+    @putByIdDirectPrivate(this, "queue", @newQueue());
+    @putByIdDirectPrivate(this, "started", false);
+    @putByIdDirectPrivate(this, "closeRequested", false);
+    @putByIdDirectPrivate(this, "pullAgain", false);
+    @putByIdDirectPrivate(this, "pulling", false);
+    @putByIdDirectPrivate(this, "strategy", @validateAndNormalizeQueuingStrategy(size, highWaterMark));
 
     const controller = this;
     @promiseInvokeOrNoopNoCatch(underlyingSource, "start", [this]).@then(() => {
-        controller.@started = true;
-        @assert(!controller.@pulling);
-        @assert(!controller.@pullAgain);
+        @putByIdDirectPrivate(controller, "started", true);
+        @assert(!@getByIdDirectPrivate(controller, "pulling"));
+        @assert(!@getByIdDirectPrivate(controller, "pullAgain"));
         @readableStreamDefaultControllerCallPullIfNeeded(controller);
     }, (error) => {
-        if (stream.@state === @streamReadable)
+        if (@getByIdDirectPrivate(stream, "state") === @streamReadable)
             @readableStreamDefaultControllerError(controller, error);
     });
 
-    this.@cancel = @readableStreamDefaultControllerCancel;
+    @putByIdDirectPrivate(this, "cancel", @readableStreamDefaultControllerCancel);
 
-    this.@pull = @readableStreamDefaultControllerPull;
+    @putByIdDirectPrivate(this, "pull", @readableStreamDefaultControllerPull);
 
     return this;
 }
@@ -100,9 +100,9 @@
 {
     "use strict";
 
-    const stream = controller.@controlledReadableStream;
-    @assert(stream.@state === @streamReadable);
-    controller.@queue = @newQueue();
+    const stream = @getByIdDirectPrivate(controller, "controlledReadableStream");
+    @assert(@getByIdDirectPrivate(stream, "state") === @streamReadable);
+    @putByIdDirectPrivate(controller, "queue", @newQueue());
     @readableStreamError(stream, error);
 }
 
@@ -113,7 +113,7 @@
 
     const reader = new @ReadableStreamDefaultReader(stream);
 
-    reader.@closedPromiseCapability.@promise.@then(() => { }, (e) => { sink.error(e); });
+    @getByIdDirectPrivate(reader, "closedPromiseCapability").@promise.@then(() => { }, (e) => { sink.error(e); });
 
     function doPipe() {
         @readableStreamDefaultReaderRead(reader).@then(function(result) {
@@ -163,7 +163,7 @@
         "cancel": @readableStreamTeeBranch2CancelFunction(teeState, stream)
     });
 
-    reader.@closedPromiseCapability.@promise.@then(@undefined, function(e) {
+    @getByIdDirectPrivate(reader, "closedPromiseCapability").@promise.@then(@undefined, function(e) {
         if (teeState.closedOrErrored)
             return;
         @readableStreamDefaultControllerError(branch1.@readableStreamController, e);
@@ -258,7 +258,7 @@
     // Spec tells to return true only if stream has a readableStreamController internal slot.
     // However, since it is a private slot, it cannot be checked using hasOwnProperty().
     // Therefore, readableStreamController is initialized with null value.
-    return @isObject(stream) && stream.@readableStreamController !== @undefined;
+    return @isObject(stream) && @getByIdDirectPrivate(stream, "readableStreamController") !== @undefined;
 }
 
 function isReadableStreamDefaultReader(reader)
@@ -268,7 +268,7 @@
     // Spec tells to return true only if reader has a readRequests internal slot.
     // However, since it is a private slot, it cannot be checked using hasOwnProperty().
     // Since readRequests is initialized with an empty array, the following test is ok.
-    return @isObject(reader) && !!reader.@readRequests;
+    return @isObject(reader) && !!@getByIdDirectPrivate(reader, "readRequests");
 }
 
 function isReadableStreamDefaultController(controller)
@@ -279,7 +279,7 @@
     // However, since it is a private slot, it cannot be checked using hasOwnProperty().
     // underlyingSource is obtained in ReadableStream constructor: if undefined, it is set
     // to an empty object. Therefore, following test is ok.
-    return @isObject(controller) && !!controller.@underlyingSource;
+    return @isObject(controller) && !!@getByIdDirectPrivate(controller, "underlyingSource");
 }
 
 function readableStreamError(stream, error)
@@ -287,30 +287,30 @@
     "use strict";
 
     @assert(@isReadableStream(stream));
-    @assert(stream.@state === @streamReadable);
-    stream.@state = @streamErrored;
-    stream.@storedError = error;
+    @assert(@getByIdDirectPrivate(stream, "state") === @streamReadable);
+    @putByIdDirectPrivate(stream, "state", @streamErrored);
+    @putByIdDirectPrivate(stream, "storedError", error);
 
-    if (!stream.@reader)
+    if (!@getByIdDirectPrivate(stream, "reader"))
         return;
 
-    const reader = stream.@reader;
+    const reader = @getByIdDirectPrivate(stream, "reader");
 
     if (@isReadableStreamDefaultReader(reader)) {
-        const requests = reader.@readRequests;
+        const requests = @getByIdDirectPrivate(reader, "readRequests");
         for (let index = 0, length = requests.length; index < length; ++index)
             requests[index].@reject.@call(@undefined, error);
-        reader.@readRequests = [];
+        @putByIdDirectPrivate(reader, "readRequests", []);
     } else {
         @assert(@isReadableStreamBYOBReader(reader));
-        const requests = reader.@readIntoRequests;
+        const requests = @getByIdDirectPrivate(reader, "readIntoRequests");
         for (let index = 0, length = requests.length; index < length; ++index)
             requests[index].@reject.@call(@undefined, error);
-        reader.@readIntoRequests = [];
+        @putByIdDirectPrivate(reader, "readIntoRequests", []);
     }
 
-    reader.@closedPromiseCapability.@reject.@call(@undefined, error);
-    reader.@closedPromiseCapability.@promise.@promiseIsHandled = true;
+    @getByIdDirectPrivate(reader, "closedPromiseCapability").@reject.@call(@undefined, error);
+    @putByIdDirectPrivate(@getByIdDirectPrivate(reader, "closedPromiseCapability").@promise, "promiseIsHandled", true);
 }
 
 function readableStreamDefaultControllerCallPullIfNeeded(controller)
@@ -317,31 +317,31 @@
 {
     "use strict";
 
-    const stream = controller.@controlledReadableStream;
+    const stream = @getByIdDirectPrivate(controller, "controlledReadableStream");
 
     if (!@readableStreamDefaultControllerCanCloseOrEnqueue(controller))
         return;
-    if (!controller.@started)
+    if (!@getByIdDirectPrivate(controller, "started"))
         return;
-    if ((!@isReadableStreamLocked(stream) || !stream.@reader.@readRequests.length) && @readableStreamDefaultControllerGetDesiredSize(controller) <= 0)
+    if ((!@isReadableStreamLocked(stream) || !@getByIdDirectPrivate(@getByIdDirectPrivate(stream, "reader"), "readRequests").length) && @readableStreamDefaultControllerGetDesiredSize(controller) <= 0)
         return;
 
-    if (controller.@pulling) {
-        controller.@pullAgain = true;
+    if (@getByIdDirectPrivate(controller, "pulling")) {
+        @putByIdDirectPrivate(controller, "pullAgain", true);
         return;
     }
 
-    @assert(!controller.@pullAgain);
-    controller.@pulling = true;
+    @assert(!@getByIdDirectPrivate(controller, "pullAgain"));
+    @putByIdDirectPrivate(controller, "pulling", true);
 
-    @promiseInvokeOrNoop(controller.@underlyingSource, "pull", [controller]).@then(function() {
-        controller.@pulling = false;
-        if (controller.@pullAgain) {
-            controller.@pullAgain = false;
+    @promiseInvokeOrNoop(@getByIdDirectPrivate(controller, "underlyingSource"), "pull", [controller]).@then(function() {
+        @putByIdDirectPrivate(controller, "pulling", false);
+        if (@getByIdDirectPrivate(controller, "pullAgain")) {
+            @putByIdDirectPrivate(controller, "pullAgain", false);
             @readableStreamDefaultControllerCallPullIfNeeded(controller);
         }
     }, function(error) {
-        if (stream.@state === @streamReadable)
+        if (@getByIdDirectPrivate(stream, "state") === @streamReadable)
             @readableStreamDefaultControllerError(controller, error);
     });
 }
@@ -351,7 +351,7 @@
    "use strict";
 
     @assert(@isReadableStream(stream));
-    return !!stream.@reader;
+    return !!@getByIdDirectPrivate(stream, "reader");
 }
 
 function readableStreamDefaultControllerGetDesiredSize(controller)
@@ -358,14 +358,15 @@
 {
    "use strict";
 
-   const stream = controller.@controlledReadableStream;
+    const stream = @getByIdDirectPrivate(controller, "controlledReadableStream");
+    const state = @getByIdDirectPrivate(stream, "state");
 
-   if (stream.@state === @streamErrored)
-       return null;
-   if (stream.@state === @streamClosed)
-       return 0;
+    if (state === @streamErrored)
+        return null;
+    if (state === @streamClosed)
+        return 0;
 
-   return controller.@strategy.highWaterMark - controll...@queue.size;
+    return @getByIdDirectPrivate(controller, "strategy").highWaterMark - @getByIdDirectPrivate(controller, "queue").size;
 }
 
 
@@ -373,7 +374,7 @@
 {
     "use strict";
 
-    const stream = reader.@ownerReadableStream;
+    const stream = @getByIdDirectPrivate(reader, "ownerReadableStream");
     @assert(!!stream);
     return @readableStreamCancel(stream, reason);
 }
@@ -382,13 +383,14 @@
 {
     "use strict";
 
-    stream.@disturbed = true;
-    if (stream.@state === @streamClosed)
+    @putByIdDirectPrivate(stream, "disturbed", true);
+    const state = @getByIdDirectPrivate(stream, "state");
+    if (state === @streamClosed)
         return @Promise.@resolve();
-    if (stream.@state === @streamErrored)
-        return @Promise.@reject(stream.@storedError);
+    if (state === @streamErrored)
+        return @Promise.@reject(@getByIdDirectPrivate(stream, "storedError"));
     @readableStreamClose(stream);
-    return stream.@readableStreamController.@cancel(stream.@readableStreamController, reason).@then(function() {  });
+    return @getByIdDirectPrivate(stream, "readableStreamController").@cancel(@getByIdDirectPrivate(stream, "readableStreamController"), reason).@then(function() {  });
 }
 
 function readableStreamDefaultControllerCancel(controller, reason)
@@ -395,8 +397,8 @@
 {
     "use strict";
 
-    controller.@queue = @newQueue();
-    return @promiseInvokeOrNoop(controller.@underlyingSource, "cancel", [reason]);
+    @putByIdDirectPrivate(controller, "queue", @newQueue());
+    return @promiseInvokeOrNoop(@getByIdDirectPrivate(controller, "underlyingSource"), "cancel", [reason]);
 }
 
 function readableStreamDefaultControllerPull(controller)
@@ -403,10 +405,10 @@
 {
     "use strict";
 
-    const stream = controller.@controlledReadableStream;
-    if (controller.@queue.content.length) {
-        const chunk = @dequeueValue(controller.@queue);
-        if (controller.@closeRequested && controller.@queue.content.length === 0)
+    const stream = @getByIdDirectPrivate(controller, "controlledReadableStream");
+    if (@getByIdDirectPrivate(controller, "queue").content.length) {
+        const chunk = @dequeueValue(@getByIdDirectPrivate(controller, "queue"));
+        if (@getByIdDirectPrivate(controller, "closeRequested") && @getByIdDirectPrivate(controller, "queue").content.length === 0)
             @readableStreamClose(stream);
         else
             @readableStreamDefaultControllerCallPullIfNeeded(controller);
@@ -422,9 +424,9 @@
     "use strict";
 
     @assert(@readableStreamDefaultControllerCanCloseOrEnqueue(controller));
-    controller.@closeRequested = true;
-    if (controller.@queue.content.length === 0)
-        @readableStreamClose(controller.@controlledReadableStream);
+    @putByIdDirectPrivate(controller, "closeRequested", true);
+    if (@getByIdDirectPrivate(controller, "queue").content.length === 0)
+        @readableStreamClose(@getByIdDirectPrivate(controller, "controlledReadableStream"));
 }
 
 function readableStreamClose(stream)
@@ -431,21 +433,21 @@
 {
     "use strict";
 
-    @assert(stream.@state === @streamReadable);
-    stream.@state = @streamClosed;
-    const reader = stream.@reader;
+    @assert(@getByIdDirectPrivate(stream, "state") === @streamReadable);
+    @putByIdDirectPrivate(stream, "state", @streamClosed);
+    const reader = @getByIdDirectPrivate(stream, "reader");
 
     if (!reader)
         return;
 
     if (@isReadableStreamDefaultReader(reader)) {
-        const requests = reader.@readRequests;
+        const requests = @getByIdDirectPrivate(reader, "readRequests");
         for (let index = 0, length = requests.length; index < length; ++index)
             requests[index].@resolve.@call(@undefined, {value:@undefined, done: true});
-        reader.@readRequests = [];
+        @putByIdDirectPrivate(reader, "readRequests", []);
     }
 
-    reader.@closedPromiseCapability.@resolve.@call();
+    @getByIdDirectPrivate(reader, "closedPromiseCapability").@resolve.@call();
 }
 
 function readableStreamFulfillReadRequest(stream, chunk, done)
@@ -452,7 +454,7 @@
 {
     "use strict";
 
-    stream.@reader.@readRequests.@shift().@resolve.@call(@undefined, {value: chunk, done: done});
+    @getByIdDirectPrivate(@getByIdDirectPrivate(stream, "reader"), "readRequests").@shift().@resolve.@call(@undefined, {value: chunk, done: done});
 }
 
 function readableStreamDefaultControllerEnqueue(controller, chunk)
@@ -459,10 +461,10 @@
 {
     "use strict";
 
-    const stream = controller.@controlledReadableStream;
+    const stream = @getByIdDirectPrivate(controller, "controlledReadableStream");
     @assert(@readableStreamDefaultControllerCanCloseOrEnqueue(controller));
 
-    if (@isReadableStreamLocked(stream) && stream.@reader.@readRequests.length) {
+    if (@isReadableStreamLocked(stream) && @getByIdDirectPrivate(@getByIdDirectPrivate(stream, "reader"), "readRequests").length) {
         @readableStreamFulfillReadRequest(stream, chunk, false);
         @readableStreamDefaultControllerCallPullIfNeeded(controller);
         return;
@@ -470,12 +472,12 @@
 
     try {
         let chunkSize = 1;
-        if (controll...@strategy.size !== @undefined)
-            chunkSize = controll...@strategy.size(chunk);
-        @enqueueValueWithSize(controller.@queue, chunk, chunkSize);
+        if (@getByIdDirectPrivate(controller, "strategy").size !== @undefined)
+            chunkSize = @getByIdDirectPrivate(controller, "strategy").size(chunk);
+        @enqueueValueWithSize(@getByIdDirectPrivate(controller, "queue"), chunk, chunkSize);
     }
     catch(error) {
-        if (stream.@state === @streamReadable)
+        if (@getByIdDirectPrivate(stream, "state") === @streamReadable)
             @readableStreamDefaultControllerError(controller, error);
         throw error;
     }
@@ -486,17 +488,18 @@
 {
     "use strict";
 
-    const stream = reader.@ownerReadableStream;
+    const stream = @getByIdDirectPrivate(reader, "ownerReadableStream");
     @assert(!!stream);
+    const state = @getByIdDirectPrivate(stream, "state");
 
-    stream.@disturbed = true;
-    if (stream.@state === @streamClosed)
+    @putByIdDirectPrivate(stream, "disturbed", true);
+    if (state === @streamClosed)
         return @Promise.@resolve({value: @undefined, done: true});
-    if (stream.@state === @streamErrored)
-        return @Promise.@reject(stream.@storedError);
-    @assert(stream.@state === @streamReadable);
+    if (state === @streamErrored)
+        return @Promise.@reject(@getByIdDirectPrivate(stream, "storedError"));
+    @assert(state === @streamReadable);
 
-    return stream.@readableStreamController.@pull(stream.@readableStreamController);
+    return @getByIdDirectPrivate(stream, "readableStreamController").@pull(@getByIdDirectPrivate(stream, "readableStreamController"));
 }
 
 function readableStreamAddReadRequest(stream)
@@ -503,11 +506,11 @@
 {
     "use strict";
 
-    @assert(@isReadableStreamDefaultReader(stream.@reader));
-    @assert(stream.@state == @streamReadable);
+    @assert(@isReadableStreamDefaultReader(@getByIdDirectPrivate(stream, "reader")));
+    @assert(@getByIdDirectPrivate(stream, "state") == @streamReadable);
 
     const readRequest = @newPromiseCapability(@Promise);
-    stream.@reader.@readRequests.@push(readRequest);
+    @getByIdDirectPrivate(@getByIdDirectPrivate(stream, "reader"), "readRequests").@push(readRequest);
 
     return readRequest.@promise;
 }
@@ -517,7 +520,7 @@
     "use strict";
 
     @assert(@isReadableStream(stream));
-    return stream.@disturbed;
+    return @getByIdDirectPrivate(stream, "disturbed");
 }
 
 function readableStreamReaderGenericRelease(reader)
@@ -524,17 +527,17 @@
 {
     "use strict";
 
-    @assert(!!reader.@ownerReadableStream);
-    @assert(reader.@ownerReadableStream.@reader === reader);
+    @assert(!!@getByIdDirectPrivate(reader, "ownerReadableStream"));
+    @assert(@getByIdDirectPrivate(@getByIdDirectPrivate(reader, "ownerReadableStream"), "reader") === reader);
 
-    if (reader.@ownerReadableStream.@state === @streamReadable)
-        reader.@closedPromiseCapability.@reject.@call(@undefined, new @TypeError("releasing lock of reader whose stream is still in readable state"));
+    if (@getByIdDirectPrivate(@getByIdDirectPrivate(reader, "ownerReadableStream"), "state") === @streamReadable)
+        @getByIdDirectPrivate(reader, "closedPromiseCapability").@reject.@call(@undefined, new @TypeError("releasing lock of reader whose stream is still in readable state"));
     else
-        reader.@closedPromiseCapability = { @promise: @newHandledRejectedPromise(new @TypeError("reader released lock")) };
+        @putByIdDirectPrivate(reader, "closedPromiseCapability", { @promise: @newHandledRejectedPromise(new @TypeError("reader released lock")) });
 
-    reader.@closedPromiseCapability.@promise.@promiseIsHandled = true;
-    reader.@ownerReadableStream.@reader = @undefined;
-    reader.@ownerReadableStream = @undefined;
+    @putByIdDirectPrivate(@getByIdDirectPrivate(reader, "closedPromiseCapability").@promise, "promiseIsHandled", true);
+    @putByIdDirectPrivate(@getByIdDirectPrivate(reader, "ownerReadableStream"), "reader", @undefined);
+    @putByIdDirectPrivate(reader, "ownerReadableStream", @undefined);
 }
 
 function readableStreamDefaultControllerCanCloseOrEnqueue(controller)
@@ -541,5 +544,5 @@
 {
     "use strict";
 
-    return !controller.@closeRequested && controller.@controlledReadableStream.@state === @streamReadable;
+    return !@getByIdDirectPrivate(controller, "closeRequested") && @getByIdDirectPrivate(@getByIdDirectPrivate(controller, "controlledReadableStream"), "state") === @streamReadable;
 }

Modified: trunk/Source/WebCore/Modules/streams/StreamInternals.js (230636 => 230637)


--- trunk/Source/WebCore/Modules/streams/StreamInternals.js	2018-04-13 16:54:12 UTC (rev 230636)
+++ trunk/Source/WebCore/Modules/streams/StreamInternals.js	2018-04-13 17:01:40 UTC (rev 230637)
@@ -81,11 +81,11 @@
     if (size !== @undefined && typeof size !== "function")
         @throwTypeError("size parameter must be a function");
 
-    const normalizedStrategy = { };
+    const normalizedStrategy = {
+        size: size,
+        highWaterMark: @toNumber(highWaterMark)
+    };
 
-    normalizedStrategy.size = size;
-    normalizedStrategy.highWaterMark = @toNumber(highWaterMark);
-
     if (@isNaN(normalizedStrategy.highWaterMark) || normalizedStrategy.highWaterMark < 0)
         @throwRangeError("highWaterMark value is negative or not a number");
 

Modified: trunk/Source/WebCore/Modules/streams/WritableStream.js (230636 => 230637)


--- trunk/Source/WebCore/Modules/streams/WritableStream.js	2018-04-13 16:54:12 UTC (rev 230636)
+++ trunk/Source/WebCore/Modules/streams/WritableStream.js	2018-04-13 17:01:40 UTC (rev 230637)
@@ -41,15 +41,15 @@
     if (!@isObject(strategy))
         @throwTypeError("WritableStream constructor takes an object as second argument, if any");
 
-    this.@underlyingSink = underlyingSink;
-    this.@closedPromiseCapability = @newPromiseCapability(@Promise);
-    this.@readyPromiseCapability = { @promise: @Promise.@resolve() };
-    this.@queue = @newQueue();
-    this.@state = @streamWritable;
-    this.@started = false;
-    this.@writing = false;
+    @putByIdDirectPrivate(this, "underlyingSink", underlyingSink);
+    @putByIdDirectPrivate(this, "closedPromiseCapability", @newPromiseCapability(@Promise));
+    @putByIdDirectPrivate(this, "readyPromiseCapability", { @promise: @Promise.@resolve() });
+    @putByIdDirectPrivate(this, "queue", @newQueue());
+    @putByIdDirectPrivate(this, "state", @streamWritable);
+    @putByIdDirectPrivate(this, "started", false);
+    @putByIdDirectPrivate(this, "writing", false);
 
-    this.@strategy = @validateAndNormalizeQueuingStrategy(strategy.size, strategy.highWaterMark);
+    @putByIdDirectPrivate(this, "strategy", @validateAndNormalizeQueuingStrategy(strategy.size, strategy.highWaterMark));
 
     @syncWritableStreamStateWithQueue(this);
 
@@ -56,10 +56,10 @@
     const errorFunction = (e) => {
         @errorWritableStream(this, e);
     };
-    this.@startedPromise = @promiseInvokeOrNoopNoCatch(underlyingSink, "start", [errorFunction]);
-    this.@startedPromise.@then(() => {
-        this.@started = true;
-        this.@startedPromise = @undefined;
+    @putByIdDirectPrivate(this, "startedPromise", @promiseInvokeOrNoopNoCatch(underlyingSink, "start", [errorFunction]));
+    @getByIdDirectPrivate(this, "startedPromise").@then(() => {
+        @putByIdDirectPrivate(this, "started", true);
+        @putByIdDirectPrivate(this, "startedPromise", @undefined);
     }, errorFunction);
 
     return this;
@@ -72,15 +72,16 @@
     if (!@isWritableStream(this))
         return @Promise.@reject(new @TypeError("The WritableStream.abort method can only be used on instances of WritableStream"));
 
-    if (this.@state === @streamClosed)
+    const state = @getByIdDirectPrivate(this, "state");
+    if (state === @streamClosed)
         return @Promise.@resolve();
 
-    if (this.@state === @streamErrored)
-        return @Promise.@reject(this.@storedError);
+    if (state === @streamErrored)
+        return @Promise.@reject(@getByIdDirectPrivate(this, "storedError"));
 
     @errorWritableStream(this, reason);
 
-    return @promiseInvokeOrFallbackOrNoop(this.@underlyingSink, "abort", [reason], "close", []).@then(function() { });
+    return @promiseInvokeOrFallbackOrNoop(@getByIdDirectPrivate(this, "underlyingSink"), "abort", [reason], "close", []).@then(function() { });
 }
 
 function close()
@@ -90,20 +91,21 @@
     if (!@isWritableStream(this))
         return @Promise.@reject(new @TypeError("The WritableStream.close method can only be used on instances of WritableStream"));
 
-    if (this.@state === @streamClosed || this.@state === @streamClosing)
+    const state = @getByIdDirectPrivate(this, "state");
+    if (state === @streamClosed || state === @streamClosing)
         return @Promise.@reject(new @TypeError("Cannot close a WritableString that is closed or closing"));
 
-    if (this.@state === @streamErrored)
-        return @Promise.@reject(this.@storedError);
+    if (state === @streamErrored)
+        return @Promise.@reject(@getByIdDirectPrivate(this, "storedError"));
 
-    if (this.@state === @streamWaiting)
-        this.@readyPromiseCapability.@resolve.@call();
+    if (state === @streamWaiting)
+        @getByIdDirectPrivate(this, "readyPromiseCapability").@resolve.@call();
 
-    this.@state = @streamClosing;
-    @enqueueValueWithSize(this.@queue, "close", 0);
+    @putByIdDirectPrivate(this, "state", @streamClosing);
+    @enqueueValueWithSize(@getByIdDirectPrivate(this, "queue"), "close", 0);
     @callOrScheduleWritableStreamAdvanceQueue(this);
 
-    return this.@closedPromiseCapability.@promise;
+    return @getByIdDirectPrivate(this, "closedPromiseCapability").@promise;
 }
 
 function write(chunk)
@@ -113,18 +115,19 @@
     if (!@isWritableStream(this))
         return @Promise.@reject(new @TypeError("The WritableStream.write method can only be used on instances of WritableStream"));
 
-    if (this.@state === @streamClosed || this.@state === @streamClosing)
+    const state = @getByIdDirectPrivate(this, "state");
+    if (state === @streamClosed || state === @streamClosing)
         return @Promise.@reject(new @TypeError("Cannot write on a WritableString that is closed or closing"));
 
-    if (this.@state === @streamErrored)
+    if (state === @streamErrored)
         return @Promise.@reject(this.@storedError);
 
-    @assert(this.@state === @streamWritable || this.@state === @streamWaiting);
+    @assert(state === @streamWritable || state === @streamWaiting);
 
     let chunkSize = 1;
-    if (th...@strategy.size !== @undefined) {
+    if (@getByIdDirectPrivate(this, "strategy").size !== @undefined) {
         try {
-            chunkSize = th...@strategy.size.@call(@undefined, chunk);
+            chunkSize = @getByIdDirectPrivate(this, "strategy").size.@call(@undefined, chunk);
         } catch(e) {
             @errorWritableStream(this, e);
             return @Promise.@reject(e);
@@ -133,7 +136,7 @@
 
     const promiseCapability = @newPromiseCapability(@Promise);
     try {
-        @enqueueValueWithSize(this.@queue, { promiseCapability: promiseCapability, chunk: chunk }, chunkSize);
+        @enqueueValueWithSize(@getByIdDirectPrivate(this, "queue"), { promiseCapability: promiseCapability, chunk: chunk }, chunkSize);
     } catch (e) {
         @errorWritableStream(this, e);
         return @Promise.@reject(e);
@@ -153,7 +156,7 @@
     if (!@isWritableStream(this))
         return @Promise.@reject(new @TypeError("The WritableStream.closed getter can only be used on instances of WritableStream"));
 
-    return this.@closedPromiseCapability.@promise;
+    return @getByIdDirectPrivate(this, "closedPromiseCapability").@promise;
 }
 
 @getter
@@ -164,7 +167,7 @@
     if (!@isWritableStream(this))
         return @Promise.@reject(new @TypeError("The WritableStream.ready getter can only be used on instances of WritableStream"));
 
-    return this.@readyPromiseCapability.@promise;
+    return @getByIdDirectPrivate(this, "readyPromiseCapability").@promise;
 }
 
 @getter
@@ -175,7 +178,7 @@
     if (!@isWritableStream(this))
         @throwTypeError("The WritableStream.state getter can only be used on instances of WritableStream");
 
-    switch(this.@state) {
+    switch(@getByIdDirectPrivate(this, "state")) {
     case @streamClosed:
         return "closed";
     case @streamClosing:

Modified: trunk/Source/WebCore/Modules/streams/WritableStreamInternals.js (230636 => 230637)


--- trunk/Source/WebCore/Modules/streams/WritableStreamInternals.js	2018-04-13 16:54:12 UTC (rev 230636)
+++ trunk/Source/WebCore/Modules/streams/WritableStreamInternals.js	2018-04-13 17:01:40 UTC (rev 230637)
@@ -31,7 +31,7 @@
 {
     "use strict";
 
-    return @isObject(stream) && !!stream.@underlyingSink;
+    return @isObject(stream) && !!@getByIdDirectPrivate(stream, "underlyingSink");
 }
 
 function syncWritableStreamStateWithQueue(stream)
@@ -38,19 +38,20 @@
 {
     "use strict";
 
-    if (stream.@state === @streamClosing)
+    const state = @getByIdDirectPrivate(stream, "state");
+    if (state === @streamClosing)
         return;
 
-    @assert(stream.@state === @streamWritable || stream.@state === @streamWaiting);
+    @assert(state === @streamWritable || state === @streamWaiting);
 
-    const shouldApplyBackpressure = stre...@queue.size > stream.@strategy.highWaterMark;
-    if (shouldApplyBackpressure && stream.@state === @streamWritable) {
-        stream.@state = @streamWaiting;
-        stream.@readyPromiseCapability = @newPromiseCapability(@Promise);
+    const shouldApplyBackpressure = @getByIdDirectPrivate(stream, "queue").size > @getByIdDirectPrivate(stream, "strategy").highWaterMark;
+    if (shouldApplyBackpressure && state === @streamWritable) {
+        @putByIdDirectPrivate(stream, "state", @streamWaiting);
+        @putByIdDirectPrivate(stream, "readyPromiseCapability", @newPromiseCapability(@Promise));
     }
-    if (!shouldApplyBackpressure && stream.@state === @streamWaiting) {
-        stream.@state = @streamWritable;
-        stream.@readyPromiseCapability.@resolve.@call();
+    if (!shouldApplyBackpressure && state === @streamWaiting) {
+        @putByIdDirectPrivate(stream, "state", @streamWritable);
+        @getByIdDirectPrivate(stream, "readyPromiseCapability").@resolve.@call();
     }
 }
 
@@ -58,18 +59,19 @@
 {
     "use strict";
 
-    if (stream.@state === @streamClosed || stream.@state === @streamErrored)
+    const state = @getByIdDirectPrivate(stream, "state");
+    if (state === @streamClosed || state === @streamErrored)
         return;
-    while (stream.@queue.content.length > 0) {
-        const writeRecord = @dequeueValue(stream.@queue);
+    while (@getByIdDirectPrivate(stream, "queue").content.length > 0) {
+        const writeRecord = @dequeueValue(@getByIdDirectPrivate(stream, "queue"));
         if (writeRecord !== "close")
             writeRecord.promiseCapability.@reject.@call(@undefined, e);
     }
-    stream.@storedError = e;
-    if (stream.@state === @streamWaiting)
-        stream.@readyPromiseCapability.@resolve.@call();
-    stream.@closedPromiseCapability.@reject.@call(@undefined, e);
-    stream.@state = @streamErrored;
+    @putByIdDirectPrivate(stream, "storedError", e);
+    if (state === @streamWaiting)
+        @getByIdDirectPrivate(stream, "readyPromiseCapability").@resolve.@call();
+    @getByIdDirectPrivate(stream, "closedPromiseCapability").@reject.@call(@undefined, e);
+    @putByIdDirectPrivate(stream, "state", @streamErrored);
 }
 
 function callOrScheduleWritableStreamAdvanceQueue(stream)
@@ -76,8 +78,8 @@
 {
     "use strict";
 
-    if (!stream.@started)
-        stream.@startedPromise.@then(function() { @writableStreamAdvanceQueue(stream); });
+    if (!@getByIdDirectPrivate(stream, "started"))
+        @getByIdDirectPrivate(stream, "startedPromise").@then(function() { @writableStreamAdvanceQueue(stream); });
     else
         @writableStreamAdvanceQueue(stream);
 }
@@ -86,26 +88,26 @@
 {
     "use strict";
 
-    if (stream.@queue.content.length === 0 || stream.@writing)
+    if (@getByIdDirectPrivate(stream, "queue").content.length === 0 || @getByIdDirectPrivate(stream, "writing"))
         return;
 
-    const writeRecord = @peekQueueValue(stream.@queue);
+    const writeRecord = @peekQueueValue(@getByIdDirectPrivate(stream, "queue"));
     if (writeRecord === "close") {
-        @assert(stream.@state === @streamClosing);
-        @dequeueValue(stream.@queue);
-        @assert(stream.@queue.content.length === 0);
+        @assert(@getByIdDirectPrivate(stream, "state") === @streamClosing);
+        @dequeueValue(@getByIdDirectPrivate(stream, "queue"));
+        @assert(@getByIdDirectPrivate(stream, "queue").content.length === 0);
         @closeWritableStream(stream);
         return;
     }
 
-    stream.@writing = true;
-    @promiseInvokeOrNoop(stream.@underlyingSink, "write", [writeRecord.chunk]).@then(
+    @putByIdDirectPrivate(stream, "writing", true);
+    @promiseInvokeOrNoop(@getByIdDirectPrivate(stream, "underlyingSink"), "write", [writeRecord.chunk]).@then(
         function() {
-            if (stream.@state === @streamErrored)
+            if (@getByIdDirectPrivate(stream, "state") === @streamErrored)
                 return;
-            stream.@writing = false;
+            @putByIdDirectPrivate(stream, "writing", false);
             writeRecord.promiseCapability.@resolve.@call();
-            @dequeueValue(stream.@queue);
+            @dequeueValue(@getByIdDirectPrivate(stream, "queue"));
             @syncWritableStreamStateWithQueue(stream);
             @writableStreamAdvanceQueue(stream);
         },
@@ -119,14 +121,14 @@
 {
     "use strict";
 
-    @assert(stream.@state === @streamClosing);
-    @promiseInvokeOrNoop(stream.@underlyingSink, "close").@then(
+    @assert(@getByIdDirectPrivate(stream, "state") === @streamClosing);
+    @promiseInvokeOrNoop(@getByIdDirectPrivate(stream, "underlyingSink"), "close").@then(
         function() {
-            if (stream.@state === @streamErrored)
+            if (@getByIdDirectPrivate(stream, "state") === @streamErrored)
                 return;
-            @assert(stream.@state === @streamClosing);
-            stream.@closedPromiseCapability.@resolve.@call();
-            stream.@state = @streamClosed;
+            @assert(@getByIdDirectPrivate(stream, "state") === @streamClosing);
+            @getByIdDirectPrivate(stream, "closedPromiseCapability").@resolve.@call();
+            @putByIdDirectPrivate(stream, "state", @streamClosed);
         },
         function(r) {
             @errorWritableStream(stream, r);

Modified: trunk/Source/WebCore/bindings/js/JSDOMBindingInternals.js (230636 => 230637)


--- trunk/Source/WebCore/bindings/js/JSDOMBindingInternals.js	2018-04-13 16:54:12 UTC (rev 230636)
+++ trunk/Source/WebCore/bindings/js/JSDOMBindingInternals.js	2018-04-13 17:01:40 UTC (rev 230637)
@@ -28,7 +28,7 @@
 function mapLikeForEach(callback)
 {
     "use strict";
-    this.@backingMap.forEach((value, key, map) => {
+    @getByIdDirectPrivate(this, "backingMap").forEach((value, key, map) => {
         callback(value, key, this);
     });
 }
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to