| /* |
| * Copyright (c) 2015 Canon Inc. All rights reserved. |
| * Copyright (c) 2015 Igalia. |
| * Copyright (c) 2016 Apple Inc. All rights reserved. |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions |
| * are met: |
| * 1. Redistributions of source code must retain the above copyright |
| * notice, this list of conditions and the following disclaimer. |
| * 2. Redistributions in binary form must reproduce the above copyright |
| * notice, this list of conditions and the following disclaimer in the |
| * documentation and/or other materials provided with the distribution. |
| * |
| * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' |
| * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, |
| * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
| * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS |
| * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
| * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
| * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
| * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
| * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
| * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF |
| * THE POSSIBILITY OF SUCH DAMAGE. |
| * |
| */ |
| |
| // DO NOT EDIT THIS FILE. It is automatically generated from JavaScript files for |
| // builtins by the script: Source/JavaScriptCore/Scripts/generate-js-builtins.py |
| |
| #include "config.h" |
| #include "ReadableStreamInternalsBuiltins.h" |
| |
| #if ENABLE(READABLE_STREAM_API) |
| |
| #include "WebCoreJSClientData.h" |
| #include <heap/HeapInlines.h> |
| #include <runtime/Executable.h> |
| #include <runtime/Intrinsic.h> |
| #include <runtime/JSCJSValueInlines.h> |
| #include <runtime/JSCellInlines.h> |
| #include <runtime/StructureInlines.h> |
| #include <runtime/VM.h> |
| |
| namespace WebCore { |
| |
| const JSC::ConstructAbility s_readableStreamInternalsPrivateInitializeReadableStreamDefaultReaderCodeConstructAbility = JSC::ConstructAbility::CannotConstruct; |
| const int s_readableStreamInternalsPrivateInitializeReadableStreamDefaultReaderCodeLength = 798; |
| static const JSC::Intrinsic s_readableStreamInternalsPrivateInitializeReadableStreamDefaultReaderCodeIntrinsic = JSC::NoIntrinsic; |
| const char* s_readableStreamInternalsPrivateInitializeReadableStreamDefaultReaderCode = |
| "(function (stream)\n" \ |
| "{\n" \ |
| " \"use strict\";\n" \ |
| " if (!@isReadableStream(stream))\n" \ |
| " throw new @TypeError(\"ReadableStreamDefaultReader needs a ReadableStream\");\n" \ |
| " if (@isReadableStreamLocked(stream))\n" \ |
| " throw new @TypeError(\"ReadableStream is locked\");\n" \ |
| " this.@readRequests = [];\n" \ |
| " this.@ownerReadableStream = stream;\n" \ |
| " stream.@reader = this;\n" \ |
| " if (stream.@state === @streamReadable) {\n" \ |
| " this.@closedPromiseCapability = @newPromiseCapability(@Promise);\n" \ |
| " return this;\n" \ |
| " }\n" \ |
| " if (stream.@state === @streamClosed) {\n" \ |
| " this.@closedPromiseCapability = { @promise: @Promise.@resolve() };\n" \ |
| " return this;\n" \ |
| " }\n" \ |
| " @assert(stream.@state === @streamErrored);\n" \ |
| " this.@closedPromiseCapability = { @promise: @Promise.@reject(stream.@storedError) };\n" \ |
| " return this;\n" \ |
| "})\n" \ |
| ; |
| |
| const JSC::ConstructAbility s_readableStreamInternalsPrivateInitializeReadableStreamDefaultControllerCodeConstructAbility = JSC::ConstructAbility::CannotConstruct; |
| const int s_readableStreamInternalsPrivateInitializeReadableStreamDefaultControllerCodeLength = 1683; |
| static const JSC::Intrinsic s_readableStreamInternalsPrivateInitializeReadableStreamDefaultControllerCodeIntrinsic = JSC::NoIntrinsic; |
| const char* s_readableStreamInternalsPrivateInitializeReadableStreamDefaultControllerCode = |
| "(function (stream, underlyingSource, size, highWaterMark)\n" \ |
| "{\n" \ |
| " \"use strict\";\n" \ |
| " if (!@isReadableStream(stream))\n" \ |
| " throw new @TypeError(\"ReadableStreamDefaultController needs a ReadableStream\");\n" \ |
| " if (stream.@readableStreamController !== null)\n" \ |
| " throw new @TypeError(\"ReadableStream already has a controller\");\n" \ |
| " this.@controlledReadableStream = stream;\n" \ |
| " this.@underlyingSource = underlyingSource;\n" \ |
| " this.@queue = @newQueue();\n" \ |
| " this.@started = false;\n" \ |
| " this.@closeRequested = false;\n" \ |
| " this.@pullAgain = false;\n" \ |
| " this.@pulling = false;\n" \ |
| " this.@strategy = @validateAndNormalizeQueuingStrategy(size, highWaterMark);\n" \ |
| " const controller = this;\n" \ |
| " const startResult = @promiseInvokeOrNoopNoCatch(underlyingSource, \"start\", [this]).@then(() => {\n" \ |
| " controller.@started = true;\n" \ |
| " @requestReadableStreamPull(controller);\n" \ |
| " }, (error) => {\n" \ |
| " if (stream.@state === @streamReadable)\n" \ |
| " @readableStreamDefaultControllerError(controller, error);\n" \ |
| " });\n" \ |
| " this.@pull = function() {\n" \ |
| " \"use strict\";\n" \ |
| " const stream = controller.@controlledReadableStream;\n" \ |
| " if (controller.@queue.content.length) {\n" \ |
| " const chunk = @dequeueValue(controller.@queue);\n" \ |
| " if (controller.@closeRequested && controller.@queue.content.length === 0)\n" \ |
| " @closeReadableStream(stream);\n" \ |
| " else\n" \ |
| " @requestReadableStreamPull(controller);\n" \ |
| " return @Promise.@resolve({value: chunk, done: false});\n" \ |
| " }\n" \ |
| " const pendingPromise = @readableStreamAddReadRequest(stream);\n" \ |
| " @requestReadableStreamPull(controller);\n" \ |
| " return pendingPromise;\n" \ |
| " }\n" \ |
| " return this;\n" \ |
| "})\n" \ |
| ; |
| |
| const JSC::ConstructAbility s_readableStreamInternalsReadableStreamDefaultControllerErrorCodeConstructAbility = JSC::ConstructAbility::CannotConstruct; |
| const int s_readableStreamInternalsReadableStreamDefaultControllerErrorCodeLength = 236; |
| static const JSC::Intrinsic s_readableStreamInternalsReadableStreamDefaultControllerErrorCodeIntrinsic = JSC::NoIntrinsic; |
| const char* s_readableStreamInternalsReadableStreamDefaultControllerErrorCode = |
| "(function (controller, error)\n" \ |
| "{\n" \ |
| " \"use strict\";\n" \ |
| " const stream = controller.@controlledReadableStream;\n" \ |
| " @assert(stream.@state === @streamReadable);\n" \ |
| " controller.@queue = @newQueue();\n" \ |
| " @errorReadableStream(stream, error);\n" \ |
| "})\n" \ |
| ; |
| |
| const JSC::ConstructAbility s_readableStreamInternalsTeeReadableStreamCodeConstructAbility = JSC::ConstructAbility::CannotConstruct; |
| const int s_readableStreamInternalsTeeReadableStreamCodeLength = 1305; |
| static const JSC::Intrinsic s_readableStreamInternalsTeeReadableStreamCodeIntrinsic = JSC::NoIntrinsic; |
| const char* s_readableStreamInternalsTeeReadableStreamCode = |
| "(function (stream, shouldClone)\n" \ |
| "{\n" \ |
| " \"use strict\";\n" \ |
| " @assert(@isReadableStream(stream));\n" \ |
| " @assert(typeof(shouldClone) === \"boolean\");\n" \ |
| " const reader = new @ReadableStreamDefaultReader(stream);\n" \ |
| " const teeState = {\n" \ |
| " closedOrErrored: false,\n" \ |
| " canceled1: false,\n" \ |
| " canceled2: false,\n" \ |
| " reason1: @undefined,\n" \ |
| " reason2: @undefined,\n" \ |
| " };\n" \ |
| " teeState.cancelPromiseCapability = @newPromiseCapability(@InternalPromise);\n" \ |
| " const pullFunction = @teeReadableStreamPullFunction(teeState, reader, shouldClone);\n" \ |
| " const branch1 = new @ReadableStream({\n" \ |
| " \"pull\": pullFunction,\n" \ |
| " \"cancel\": @teeReadableStreamBranch1CancelFunction(teeState, stream)\n" \ |
| " });\n" \ |
| " const branch2 = new @ReadableStream({\n" \ |
| " \"pull\": pullFunction,\n" \ |
| " \"cancel\": @teeReadableStreamBranch2CancelFunction(teeState, stream)\n" \ |
| " });\n" \ |
| " reader.@closedPromiseCapability.@promise.@then(@undefined, function(e) {\n" \ |
| " if (teeState.closedOrErrored)\n" \ |
| " return;\n" \ |
| " @readableStreamDefaultControllerError(branch1.@readableStreamController, e);\n" \ |
| " @readableStreamDefaultControllerError(branch2.@readableStreamController, e);\n" \ |
| " teeState.closedOrErrored = true;\n" \ |
| " });\n" \ |
| " teeState.branch1 = branch1;\n" \ |
| " teeState.branch2 = branch2;\n" \ |
| " return [branch1, branch2];\n" \ |
| "})\n" \ |
| ; |
| |
| const JSC::ConstructAbility s_readableStreamInternalsDoStructuredCloneCodeConstructAbility = JSC::ConstructAbility::CannotConstruct; |
| const int s_readableStreamInternalsDoStructuredCloneCodeLength = 304; |
| static const JSC::Intrinsic s_readableStreamInternalsDoStructuredCloneCodeIntrinsic = JSC::NoIntrinsic; |
| const char* s_readableStreamInternalsDoStructuredCloneCode = |
| "(function (object)\n" \ |
| "{\n" \ |
| " \"use strict\";\n" \ |
| " if (object instanceof @ArrayBuffer)\n" \ |
| " return @structuredCloneArrayBuffer(object);\n" \ |
| " if (@ArrayBuffer.@isView(object))\n" \ |
| " return @structuredCloneArrayBufferView(object);\n" \ |
| " throw new @TypeError(\"structuredClone not implemented for: \" + object);\n" \ |
| "})\n" \ |
| ; |
| |
| const JSC::ConstructAbility s_readableStreamInternalsTeeReadableStreamPullFunctionCodeConstructAbility = JSC::ConstructAbility::CannotConstruct; |
| const int s_readableStreamInternalsTeeReadableStreamPullFunctionCodeLength = 1155; |
| static const JSC::Intrinsic s_readableStreamInternalsTeeReadableStreamPullFunctionCodeIntrinsic = JSC::NoIntrinsic; |
| const char* s_readableStreamInternalsTeeReadableStreamPullFunctionCode = |
| "(function (teeState, reader, shouldClone)\n" \ |
| "{\n" \ |
| " \"use strict\";\n" \ |
| " return function() {\n" \ |
| " @Promise.prototype.@then.@call(@readFromReadableStreamDefaultReader(reader), function(result) {\n" \ |
| " @assert(@isObject(result));\n" \ |
| " @assert(typeof result.done === \"boolean\");\n" \ |
| " if (result.done && !teeState.closedOrErrored) {\n" \ |
| " if (!teeState.canceled1)\n" \ |
| " @readableStreamDefaultControllerClose(teeState.branch1.@readableStreamController);\n" \ |
| " if (!teeState.canceled2)\n" \ |
| " @readableStreamDefaultControllerClose(teeState.branch2.@readableStreamController);\n" \ |
| " teeState.closedOrErrored = true;\n" \ |
| " }\n" \ |
| " if (teeState.closedOrErrored)\n" \ |
| " return;\n" \ |
| " if (!teeState.canceled1)\n" \ |
| " @enqueueInReadableStream(teeState.branch1.@readableStreamController, shouldClone ? @doStructuredClone(result.value) : result.value);\n" \ |
| " if (!teeState.canceled2)\n" \ |
| " @enqueueInReadableStream(teeState.branch2.@readableStreamController, shouldClone ? @doStructuredClone(result.value) : result.value);\n" \ |
| " });\n" \ |
| " }\n" \ |
| "})\n" \ |
| ; |
| |
| const JSC::ConstructAbility s_readableStreamInternalsTeeReadableStreamBranch1CancelFunctionCodeConstructAbility = JSC::ConstructAbility::CannotConstruct; |
| const int s_readableStreamInternalsTeeReadableStreamBranch1CancelFunctionCodeLength = 455; |
| static const JSC::Intrinsic s_readableStreamInternalsTeeReadableStreamBranch1CancelFunctionCodeIntrinsic = JSC::NoIntrinsic; |
| const char* s_readableStreamInternalsTeeReadableStreamBranch1CancelFunctionCode = |
| "(function (teeState, stream)\n" \ |
| "{\n" \ |
| " \"use strict\";\n" \ |
| " return function(r) {\n" \ |
| " teeState.canceled1 = true;\n" \ |
| " teeState.reason1 = r;\n" \ |
| " if (teeState.canceled2) {\n" \ |
| " @cancelReadableStream(stream, [teeState.reason1, teeState.reason2]).@then(\n" \ |
| " teeState.cancelPromiseCapability.@resolve,\n" \ |
| " teeState.cancelPromiseCapability.@reject);\n" \ |
| " }\n" \ |
| " return teeState.cancelPromiseCapability.@promise;\n" \ |
| " }\n" \ |
| "})\n" \ |
| ; |
| |
| const JSC::ConstructAbility s_readableStreamInternalsTeeReadableStreamBranch2CancelFunctionCodeConstructAbility = JSC::ConstructAbility::CannotConstruct; |
| const int s_readableStreamInternalsTeeReadableStreamBranch2CancelFunctionCodeLength = 455; |
| static const JSC::Intrinsic s_readableStreamInternalsTeeReadableStreamBranch2CancelFunctionCodeIntrinsic = JSC::NoIntrinsic; |
| const char* s_readableStreamInternalsTeeReadableStreamBranch2CancelFunctionCode = |
| "(function (teeState, stream)\n" \ |
| "{\n" \ |
| " \"use strict\";\n" \ |
| " return function(r) {\n" \ |
| " teeState.canceled2 = true;\n" \ |
| " teeState.reason2 = r;\n" \ |
| " if (teeState.canceled1) {\n" \ |
| " @cancelReadableStream(stream, [teeState.reason1, teeState.reason2]).@then(\n" \ |
| " teeState.cancelPromiseCapability.@resolve,\n" \ |
| " teeState.cancelPromiseCapability.@reject);\n" \ |
| " }\n" \ |
| " return teeState.cancelPromiseCapability.@promise;\n" \ |
| " }\n" \ |
| "})\n" \ |
| ; |
| |
| const JSC::ConstructAbility s_readableStreamInternalsIsReadableStreamCodeConstructAbility = JSC::ConstructAbility::CannotConstruct; |
| const int s_readableStreamInternalsIsReadableStreamCodeLength = 123; |
| static const JSC::Intrinsic s_readableStreamInternalsIsReadableStreamCodeIntrinsic = JSC::NoIntrinsic; |
| const char* s_readableStreamInternalsIsReadableStreamCode = |
| "(function (stream)\n" \ |
| "{\n" \ |
| " \"use strict\";\n" \ |
| " return @isObject(stream) && stream.@readableStreamController !== @undefined;\n" \ |
| "})\n" \ |
| ; |
| |
| const JSC::ConstructAbility s_readableStreamInternalsIsReadableStreamDefaultReaderCodeConstructAbility = JSC::ConstructAbility::CannotConstruct; |
| const int s_readableStreamInternalsIsReadableStreamDefaultReaderCodeLength = 98; |
| static const JSC::Intrinsic s_readableStreamInternalsIsReadableStreamDefaultReaderCodeIntrinsic = JSC::NoIntrinsic; |
| const char* s_readableStreamInternalsIsReadableStreamDefaultReaderCode = |
| "(function (reader)\n" \ |
| "{\n" \ |
| " \"use strict\";\n" \ |
| " return @isObject(reader) && !!reader.@readRequests;\n" \ |
| "})\n" \ |
| ; |
| |
| const JSC::ConstructAbility s_readableStreamInternalsIsReadableStreamDefaultControllerCodeConstructAbility = JSC::ConstructAbility::CannotConstruct; |
| const int s_readableStreamInternalsIsReadableStreamDefaultControllerCodeLength = 114; |
| static const JSC::Intrinsic s_readableStreamInternalsIsReadableStreamDefaultControllerCodeIntrinsic = JSC::NoIntrinsic; |
| const char* s_readableStreamInternalsIsReadableStreamDefaultControllerCode = |
| "(function (controller)\n" \ |
| "{\n" \ |
| " \"use strict\";\n" \ |
| " return @isObject(controller) && !!controller.@underlyingSource;\n" \ |
| "})\n" \ |
| ; |
| |
| const JSC::ConstructAbility s_readableStreamInternalsErrorReadableStreamCodeConstructAbility = JSC::ConstructAbility::CannotConstruct; |
| const int s_readableStreamInternalsErrorReadableStreamCodeLength = 725; |
| static const JSC::Intrinsic s_readableStreamInternalsErrorReadableStreamCodeIntrinsic = JSC::NoIntrinsic; |
| const char* s_readableStreamInternalsErrorReadableStreamCode = |
| "(function (stream, error)\n" \ |
| "{\n" \ |
| " \"use strict\";\n" \ |
| " @assert(@isReadableStream(stream));\n" \ |
| " @assert(stream.@state === @streamReadable);\n" \ |
| " stream.@state = @streamErrored;\n" \ |
| " stream.@storedError = error;\n" \ |
| " if (!stream.@reader)\n" \ |
| " return;\n" \ |
| " const reader = stream.@reader;\n" \ |
| " if (@isReadableStreamDefaultReader(reader)) {\n" \ |
| " const requests = reader.@readRequests;\n" \ |
| " for (let index = 0, length = requests.length; index < length; ++index)\n" \ |
| " requests[index].@reject.@call(@undefined, error);\n" \ |
| " reader.@readRequests = [];\n" \ |
| " } else\n" \ |
| " throw new @TypeError(\"Only ReadableStreamDefaultReader is currently supported\");\n" \ |
| " reader.@closedPromiseCapability.@reject.@call(@undefined, error);\n" \ |
| "})\n" \ |
| ; |
| |
| const JSC::ConstructAbility s_readableStreamInternalsRequestReadableStreamPullCodeConstructAbility = JSC::ConstructAbility::CannotConstruct; |
| const int s_readableStreamInternalsRequestReadableStreamPullCodeLength = 1009; |
| static const JSC::Intrinsic s_readableStreamInternalsRequestReadableStreamPullCodeIntrinsic = JSC::NoIntrinsic; |
| const char* s_readableStreamInternalsRequestReadableStreamPullCode = |
| "(function (controller)\n" \ |
| "{\n" \ |
| " \"use strict\";\n" \ |
| " const stream = controller.@controlledReadableStream;\n" \ |
| " if (stream.@state === @streamClosed || stream.@state === @streamErrored)\n" \ |
| " return;\n" \ |
| " if (controller.@closeRequested)\n" \ |
| " return;\n" \ |
| " if (!controller.@started)\n" \ |
| " return;\n" \ |
| " if ((!@isReadableStreamLocked(stream) || !stream.@reader.@readRequests.length) && @readableStreamDefaultControllerGetDesiredSize(controller) <= 0)\n" \ |
| " return;\n" \ |
| " if (controller.@pulling) {\n" \ |
| " controller.@pullAgain = true;\n" \ |
| " return;\n" \ |
| " }\n" \ |
| " controller.@pulling = true;\n" \ |
| " @promiseInvokeOrNoop(controller.@underlyingSource, \"pull\", [controller]).@then(function() {\n" \ |
| " controller.@pulling = false;\n" \ |
| " if (controller.@pullAgain) {\n" \ |
| " controller.@pullAgain = false;\n" \ |
| " @requestReadableStreamPull(controller);\n" \ |
| " }\n" \ |
| " }, function(error) {\n" \ |
| " if (stream.@state === @streamReadable)\n" \ |
| " @readableStreamDefaultControllerError(controller, error);\n" \ |
| " });\n" \ |
| "})\n" \ |
| ; |
| |
| const JSC::ConstructAbility s_readableStreamInternalsIsReadableStreamLockedCodeConstructAbility = JSC::ConstructAbility::CannotConstruct; |
| const int s_readableStreamInternalsIsReadableStreamLockedCodeLength = 110; |
| static const JSC::Intrinsic s_readableStreamInternalsIsReadableStreamLockedCodeIntrinsic = JSC::NoIntrinsic; |
| const char* s_readableStreamInternalsIsReadableStreamLockedCode = |
| "(function (stream)\n" \ |
| "{\n" \ |
| " \"use strict\";\n" \ |
| " @assert(@isReadableStream(stream));\n" \ |
| " return !!stream.@reader;\n" \ |
| "})\n" \ |
| ; |
| |
| const JSC::ConstructAbility s_readableStreamInternalsReadableStreamDefaultControllerGetDesiredSizeCodeConstructAbility = JSC::ConstructAbility::CannotConstruct; |
| const int s_readableStreamInternalsReadableStreamDefaultControllerGetDesiredSizeCodeLength = 116; |
| static const JSC::Intrinsic s_readableStreamInternalsReadableStreamDefaultControllerGetDesiredSizeCodeIntrinsic = JSC::NoIntrinsic; |
| const char* s_readableStreamInternalsReadableStreamDefaultControllerGetDesiredSizeCode = |
| "(function (controller)\n" \ |
| "{\n" \ |
| " \"use strict\";\n" \ |
| " return controller.@strategy.highWaterMark - controller.@queue.size;\n" \ |
| "})\n" \ |
| ; |
| |
| const JSC::ConstructAbility s_readableStreamInternalsCancelReadableStreamCodeConstructAbility = JSC::ConstructAbility::CannotConstruct; |
| const int s_readableStreamInternalsCancelReadableStreamCodeLength = 568; |
| static const JSC::Intrinsic s_readableStreamInternalsCancelReadableStreamCodeIntrinsic = JSC::NoIntrinsic; |
| const char* s_readableStreamInternalsCancelReadableStreamCode = |
| "(function (stream, reason)\n" \ |
| "{\n" \ |
| " \"use strict\";\n" \ |
| " stream.@disturbed = true;\n" \ |
| " if (stream.@state === @streamClosed)\n" \ |
| " return @Promise.@resolve();\n" \ |
| " if (stream.@state === @streamErrored)\n" \ |
| " return @Promise.@reject(stream.@storedError);\n" \ |
| " @closeReadableStream(stream);\n" \ |
| " const controller = stream.@readableStreamController;\n" \ |
| " var underlyingSource = @undefined;\n" \ |
| " if (controller !== @undefined)\n" \ |
| " underlyingSource = controller.@underlyingSource;\n" \ |
| " return @promiseInvokeOrNoop(underlyingSource, \"cancel\", [reason]).@then(function() { });\n" \ |
| "})\n" \ |
| ; |
| |
| const JSC::ConstructAbility s_readableStreamInternalsReadableStreamDefaultControllerCloseCodeConstructAbility = JSC::ConstructAbility::CannotConstruct; |
| const int s_readableStreamInternalsReadableStreamDefaultControllerCloseCodeLength = 318; |
| static const JSC::Intrinsic s_readableStreamInternalsReadableStreamDefaultControllerCloseCodeIntrinsic = JSC::NoIntrinsic; |
| const char* s_readableStreamInternalsReadableStreamDefaultControllerCloseCode = |
| "(function (controller)\n" \ |
| "{\n" \ |
| " \"use strict\";\n" \ |
| " const stream = controller.@controlledReadableStream;\n" \ |
| " @assert(!controller.@closeRequested);\n" \ |
| " @assert(stream.@state === @streamReadable);\n" \ |
| " controller.@closeRequested = true;\n" \ |
| " if (controller.@queue.content.length === 0)\n" \ |
| " @closeReadableStream(stream);\n" \ |
| "})\n" \ |
| ; |
| |
| const JSC::ConstructAbility s_readableStreamInternalsCloseReadableStreamCodeConstructAbility = JSC::ConstructAbility::CannotConstruct; |
| const int s_readableStreamInternalsCloseReadableStreamCodeLength = 552; |
| static const JSC::Intrinsic s_readableStreamInternalsCloseReadableStreamCodeIntrinsic = JSC::NoIntrinsic; |
| const char* s_readableStreamInternalsCloseReadableStreamCode = |
| "(function (stream)\n" \ |
| "{\n" \ |
| " \"use strict\";\n" \ |
| " @assert(stream.@state === @streamReadable);\n" \ |
| " stream.@state = @streamClosed;\n" \ |
| " const reader = stream.@reader;\n" \ |
| " if (!reader)\n" \ |
| " return;\n" \ |
| " if (@isReadableStreamDefaultReader(reader)) {\n" \ |
| " const requests = reader.@readRequests;\n" \ |
| " for (let index = 0, length = requests.length; index < length; ++index)\n" \ |
| " requests[index].@resolve.@call(@undefined, {value:@undefined, done: true});\n" \ |
| " reader.@readRequests = [];\n" \ |
| " }\n" \ |
| " reader.@closedPromiseCapability.@resolve.@call();\n" \ |
| "})\n" \ |
| ; |
| |
| const JSC::ConstructAbility s_readableStreamInternalsEnqueueInReadableStreamCodeConstructAbility = JSC::ConstructAbility::CannotConstruct; |
| const int s_readableStreamInternalsEnqueueInReadableStreamCodeLength = 885; |
| static const JSC::Intrinsic s_readableStreamInternalsEnqueueInReadableStreamCodeIntrinsic = JSC::NoIntrinsic; |
| const char* s_readableStreamInternalsEnqueueInReadableStreamCode = |
| "(function (controller, chunk)\n" \ |
| "{\n" \ |
| " \"use strict\";\n" \ |
| " const stream = controller.@controlledReadableStream;\n" \ |
| " @assert(!controller.@closeRequested);\n" \ |
| " @assert(stream.@state === @streamReadable);\n" \ |
| " if (@isReadableStreamLocked(stream) && stream.@reader.@readRequests.length) {\n" \ |
| " stream.@reader.@readRequests.@shift().@resolve.@call(@undefined, {value: chunk, done: false});\n" \ |
| " @requestReadableStreamPull(controller);\n" \ |
| " return;\n" \ |
| " }\n" \ |
| " try {\n" \ |
| " let chunkSize = 1;\n" \ |
| " if (controller.@strategy.size !== @undefined)\n" \ |
| " chunkSize = controller.@strategy.size(chunk);\n" \ |
| " @enqueueValueWithSize(controller.@queue, chunk, chunkSize);\n" \ |
| " }\n" \ |
| " catch(error) {\n" \ |
| " if (stream.@state === @streamReadable)\n" \ |
| " @readableStreamDefaultControllerError(controller, error);\n" \ |
| " throw error;\n" \ |
| " }\n" \ |
| " @requestReadableStreamPull(controller);\n" \ |
| "})\n" \ |
| ; |
| |
| const JSC::ConstructAbility s_readableStreamInternalsReadFromReadableStreamDefaultReaderCodeConstructAbility = JSC::ConstructAbility::CannotConstruct; |
| const int s_readableStreamInternalsReadFromReadableStreamDefaultReaderCodeLength = 448; |
| static const JSC::Intrinsic s_readableStreamInternalsReadFromReadableStreamDefaultReaderCodeIntrinsic = JSC::NoIntrinsic; |
| const char* s_readableStreamInternalsReadFromReadableStreamDefaultReaderCode = |
| "(function (reader)\n" \ |
| "{\n" \ |
| " \"use strict\";\n" \ |
| " const stream = reader.@ownerReadableStream;\n" \ |
| " @assert(!!stream);\n" \ |
| " stream.@disturbed = true;\n" \ |
| " if (stream.@state === @streamClosed)\n" \ |
| " return @Promise.@resolve({value: @undefined, done: true});\n" \ |
| " if (stream.@state === @streamErrored)\n" \ |
| " return @Promise.@reject(stream.@storedError);\n" \ |
| " @assert(stream.@state === @streamReadable);\n" \ |
| " return stream.@readableStreamController.@pull();\n" \ |
| "})\n" \ |
| ; |
| |
| const JSC::ConstructAbility s_readableStreamInternalsReadableStreamAddReadRequestCodeConstructAbility = JSC::ConstructAbility::CannotConstruct; |
| const int s_readableStreamInternalsReadableStreamAddReadRequestCodeLength = 293; |
| static const JSC::Intrinsic s_readableStreamInternalsReadableStreamAddReadRequestCodeIntrinsic = JSC::NoIntrinsic; |
| const char* s_readableStreamInternalsReadableStreamAddReadRequestCode = |
| "(function (stream)\n" \ |
| "{\n" \ |
| " \"use strict\";\n" \ |
| " @assert(@isReadableStreamDefaultReader(stream.@reader));\n" \ |
| " @assert(stream.@state == @streamReadable);\n" \ |
| " const readRequest = @newPromiseCapability(@Promise);\n" \ |
| " stream.@reader.@readRequests.@push(readRequest);\n" \ |
| " return readRequest.@promise;\n" \ |
| "})\n" \ |
| ; |
| |
| const JSC::ConstructAbility s_readableStreamInternalsIsReadableStreamDisturbedCodeConstructAbility = JSC::ConstructAbility::CannotConstruct; |
| const int s_readableStreamInternalsIsReadableStreamDisturbedCodeLength = 112; |
| static const JSC::Intrinsic s_readableStreamInternalsIsReadableStreamDisturbedCodeIntrinsic = JSC::NoIntrinsic; |
| const char* s_readableStreamInternalsIsReadableStreamDisturbedCode = |
| "(function (stream)\n" \ |
| "{\n" \ |
| " \"use strict\";\n" \ |
| " @assert(@isReadableStream(stream));\n" \ |
| " return stream.@disturbed;\n" \ |
| "})\n" \ |
| ; |
| |
| |
| #define DEFINE_BUILTIN_GENERATOR(codeName, functionName, argumentCount) \ |
| JSC::FunctionExecutable* codeName##Generator(JSC::VM& vm) \ |
| {\ |
| JSVMClientData* clientData = static_cast<JSVMClientData*>(vm.clientData); \ |
| return clientData->builtinFunctions().readableStreamInternalsBuiltins().codeName##Executable()->link(vm, clientData->builtinFunctions().readableStreamInternalsBuiltins().codeName##Source(), Nullopt, s_##codeName##Intrinsic); \ |
| } |
| WEBCORE_FOREACH_READABLESTREAMINTERNALS_BUILTIN_CODE(DEFINE_BUILTIN_GENERATOR) |
| #undef DEFINE_BUILTIN_GENERATOR |
| |
| |
| } // namespace WebCore |
| |
| #endif // ENABLE(READABLE_STREAM_API) |