diff options
Diffstat (limited to 'src/javascript/jsc/bindings/builtins/js/WritableStreamInternals.js')
-rw-r--r-- | src/javascript/jsc/bindings/builtins/js/WritableStreamInternals.js | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/src/javascript/jsc/bindings/builtins/js/WritableStreamInternals.js b/src/javascript/jsc/bindings/builtins/js/WritableStreamInternals.js index 406b9ea48..6b2b3cf90 100644 --- a/src/javascript/jsc/bindings/builtins/js/WritableStreamInternals.js +++ b/src/javascript/jsc/bindings/builtins/js/WritableStreamInternals.js @@ -118,7 +118,7 @@ function initializeWritableStreamSlots(stream, underlyingSink) @putByIdDirectPrivate(stream, "closeRequest", @undefined); @putByIdDirectPrivate(stream, "inFlightCloseRequest", @undefined); @putByIdDirectPrivate(stream, "pendingAbortRequest", @undefined); - @putByIdDirectPrivate(stream, "writeRequests", []); + @putByIdDirectPrivate(stream, "writeRequests", @createFIFO()); @putByIdDirectPrivate(stream, "backpressure", false); @putByIdDirectPrivate(stream, "underlyingSink", underlyingSink); } @@ -233,7 +233,7 @@ function writableStreamAddWriteRequest(stream) const writePromiseCapability = @newPromiseCapability(@Promise); const writeRequests = @getByIdDirectPrivate(stream, "writeRequests"); - @arrayPush(writeRequests, writePromiseCapability); + writeRequests.push(writePromiseCapability); return writePromiseCapability.@promise; } @@ -266,10 +266,11 @@ function writableStreamFinishErroring(stream) const storedError = @getByIdDirectPrivate(stream, "storedError"); const requests = @getByIdDirectPrivate(stream, "writeRequests"); - for (let index = 0, length = requests.length; index < length; ++index) - requests[index].@reject.@call(@undefined, storedError); + for (var request = requests.shift(); request; request = requests.shift()) + request.@reject.@call(@undefined, storedError); - @putByIdDirectPrivate(stream, "writeRequests", []); + // TODO: is this still necessary? + @putByIdDirectPrivate(stream, "writeRequests", @createFIFO()); const abortRequest = @getByIdDirectPrivate(stream, "pendingAbortRequest"); if (abortRequest === @undefined) { @@ -384,9 +385,9 @@ function writableStreamMarkFirstWriteRequestInFlight(stream) { const writeRequests = @getByIdDirectPrivate(stream, "writeRequests"); @assert(@getByIdDirectPrivate(stream, "inFlightWriteRequest") === @undefined); - @assert(writeRequests.length > 0); + @assert(writeRequests.isNotEmpty()); - const writeRequest = writeRequests.@shift(); + const writeRequest = writeRequests.shift(); @putByIdDirectPrivate(stream, "inFlightWriteRequest", writeRequest); } @@ -649,7 +650,7 @@ function writableStreamDefaultControllerAdvanceQueueIfNeeded(controller) return; } - if (@getByIdDirectPrivate(controller, "queue").content.length === 0) + if (@getByIdDirectPrivate(controller, "queue").content?.isEmpty() ?? false) return; const value = @peekQueueValue(@getByIdDirectPrivate(controller, "queue")); @@ -722,7 +723,7 @@ function writableStreamDefaultControllerProcessClose(controller) @writableStreamMarkCloseRequestInFlight(stream); @dequeueValue(@getByIdDirectPrivate(controller, "queue")); - @assert(@getByIdDirectPrivate(controller, "queue").content.length === 0); + @assert(@getByIdDirectPrivate(controller, "queue").content?.isEmpty()); const sinkClosePromise = @getByIdDirectPrivate(controller, "closeAlgorithm").@call(); @writableStreamDefaultControllerClearAlgorithms(controller); |