aboutsummaryrefslogtreecommitdiff
path: root/src/javascript/jsc/bindings/builtins/js/WritableStreamInternals.js
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-06-02 03:00:45 -0700
committerGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-06-02 03:00:45 -0700
commite5eabc0658d2133603596ec17a6e7c956c5fe28c (patch)
tree8e50a0bfa0ca9eba4145191720bb7d412bf8d26f /src/javascript/jsc/bindings/builtins/js/WritableStreamInternals.js
parent121c2960de87c53cc6bdd5f92fab627a74d21a2b (diff)
downloadbun-e5eabc0658d2133603596ec17a6e7c956c5fe28c.tar.gz
bun-e5eabc0658d2133603596ec17a6e7c956c5fe28c.tar.zst
bun-e5eabc0658d2133603596ec17a6e7c956c5fe28c.zip
Faster ReadableStream
Diffstat (limited to 'src/javascript/jsc/bindings/builtins/js/WritableStreamInternals.js')
-rw-r--r--src/javascript/jsc/bindings/builtins/js/WritableStreamInternals.js19
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);