1/*
2 * Copyright (c) 2015 Canon Inc.
3 * Copyright (c) 2015 Igalia.
4 * Copyright (c) 2016 Apple Inc. All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 *
15 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
16 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
17 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
18 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
19 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
25 * THE POSSIBILITY OF SUCH DAMAGE.
26 *
27 */
28
29// DO NOT EDIT THIS FILE. It is automatically generated from JavaScript files for
30// builtins by the script: Source/JavaScriptCore/Scripts/generate-js-builtins.py
31
32#include "config.h"
33#include "ReadableStreamBuiltins.h"
34
35#if ENABLE(STREAMS_API)
36
37#include "WebCoreJSClientData.h"
38#include <JavaScriptCore/HeapInlines.h>
39#include <JavaScriptCore/IdentifierInlines.h>
40#include <JavaScriptCore/Intrinsic.h>
41#include <JavaScriptCore/JSCJSValueInlines.h>
42#include <JavaScriptCore/JSCellInlines.h>
43#include <JavaScriptCore/StructureInlines.h>
44#include <JavaScriptCore/VM.h>
45
46namespace WebCore {
47
48const JSC::ConstructAbility s_readableStreamInitializeReadableStreamCodeConstructAbility = JSC::ConstructAbility::CannotConstruct;
49const int s_readableStreamInitializeReadableStreamCodeLength = 1915;
50static const JSC::Intrinsic s_readableStreamInitializeReadableStreamCodeIntrinsic = JSC::NoIntrinsic;
51const char* const s_readableStreamInitializeReadableStreamCode =
52 "(function (underlyingSource, strategy)\n" \
53 "{\n" \
54 " \"use strict\";\n" \
55 "\n" \
56 " if (underlyingSource === @undefined)\n" \
57 " underlyingSource = { };\n" \
58 " if (strategy === @undefined)\n" \
59 " strategy = { };\n" \
60 "\n" \
61 " if (!@isObject(underlyingSource))\n" \
62 " @throwTypeError(\"ReadableStream constructor takes an object as first argument\");\n" \
63 "\n" \
64 " if (strategy !== @undefined && !@isObject(strategy))\n" \
65 " @throwTypeError(\"ReadableStream constructor takes an object as second argument, if any\");\n" \
66 "\n" \
67 " @putByIdDirectPrivate(this, \"state\", @streamReadable);\n" \
68 " @putByIdDirectPrivate(this, \"reader\", @undefined);\n" \
69 " @putByIdDirectPrivate(this, \"storedError\", @undefined);\n" \
70 " @putByIdDirectPrivate(this, \"disturbed\", false);\n" \
71 " //\n" \
72 " @putByIdDirectPrivate(this, \"readableStreamController\", null);\n" \
73 "\n" \
74 " const type = underlyingSource.type;\n" \
75 " const typeString = @toString(type);\n" \
76 "\n" \
77 " if (typeString === \"bytes\") {\n" \
78 " if (!@readableByteStreamAPIEnabled())\n" \
79 " @throwTypeError(\"ReadableByteStreamController is not implemented\");\n" \
80 "\n" \
81 " if (strategy.highWaterMark === @undefined)\n" \
82 " strategy.highWaterMark = 0;\n" \
83 " if (strategy.size !== @undefined)\n" \
84 " @throwRangeError(\"Strategy for a ReadableByteStreamController cannot have a size\");\n" \
85 "\n" \
86 " let readableByteStreamControllerConstructor = @ReadableByteStreamController;\n" \
87 " @putByIdDirectPrivate(this, \"readableStreamController\", new @ReadableByteStreamController(this, underlyingSource, strategy.highWaterMark, @isReadableStream));\n" \
88 " } else if (type === @undefined) {\n" \
89 " if (strategy.highWaterMark === @undefined)\n" \
90 " strategy.highWaterMark = 1;\n" \
91 " @putByIdDirectPrivate(this, \"readableStreamController\", new @ReadableStreamDefaultController(this, underlyingSource, strategy.size, strategy.highWaterMark, @isReadableStream));\n" \
92 " } else\n" \
93 " @throwRangeError(\"Invalid type for underlying source\");\n" \
94 "\n" \
95 " return this;\n" \
96 "})\n" \
97;
98
99const JSC::ConstructAbility s_readableStreamCancelCodeConstructAbility = JSC::ConstructAbility::CannotConstruct;
100const int s_readableStreamCancelCodeLength = 324;
101static const JSC::Intrinsic s_readableStreamCancelCodeIntrinsic = JSC::NoIntrinsic;
102const char* const s_readableStreamCancelCode =
103 "(function (reason)\n" \
104 "{\n" \
105 " \"use strict\";\n" \
106 "\n" \
107 " if (!@isReadableStream(this))\n" \
108 " return @Promise.@reject(@makeThisTypeError(\"ReadableStream\", \"cancel\"));\n" \
109 "\n" \
110 " if (@isReadableStreamLocked(this))\n" \
111 " return @Promise.@reject(@makeTypeError(\"ReadableStream is locked\"));\n" \
112 "\n" \
113 " return @readableStreamCancel(this, reason);\n" \
114 "})\n" \
115;
116
117const JSC::ConstructAbility s_readableStreamGetReaderCodeConstructAbility = JSC::ConstructAbility::CannotConstruct;
118const int s_readableStreamGetReaderCodeLength = 437;
119static const JSC::Intrinsic s_readableStreamGetReaderCodeIntrinsic = JSC::NoIntrinsic;
120const char* const s_readableStreamGetReaderCode =
121 "(function (options)\n" \
122 "{\n" \
123 " \"use strict\";\n" \
124 "\n" \
125 " if (!@isReadableStream(this))\n" \
126 " throw @makeThisTypeError(\"ReadableStream\", \"getReader\");\n" \
127 "\n" \
128 " if (options === @undefined)\n" \
129 " options = { };\n" \
130 "\n" \
131 " if (options.mode === @undefined)\n" \
132 " return new @ReadableStreamDefaultReader(this);\n" \
133 "\n" \
134 " //\n" \
135 " if (options.mode == 'byob')\n" \
136 " return new @ReadableStreamBYOBReader(this);\n" \
137 "\n" \
138 " @throwRangeError(\"Invalid mode is specified\");\n" \
139 "})\n" \
140;
141
142const JSC::ConstructAbility s_readableStreamPipeThroughCodeConstructAbility = JSC::ConstructAbility::CannotConstruct;
143const int s_readableStreamPipeThroughCodeLength = 299;
144static const JSC::Intrinsic s_readableStreamPipeThroughCodeIntrinsic = JSC::NoIntrinsic;
145const char* const s_readableStreamPipeThroughCode =
146 "(function (streams, options)\n" \
147 "{\n" \
148 " \"use strict\";\n" \
149 "\n" \
150 " const writable = streams.writable;\n" \
151 " const readable = streams.readable;\n" \
152 " const promise = this.pipeTo(writable, options);\n" \
153 " if (@isPromise(promise))\n" \
154 " @putByIdDirectPrivate(promise, \"promiseIsHandled\", true);\n" \
155 " return readable;\n" \
156 "})\n" \
157;
158
159const JSC::ConstructAbility s_readableStreamPipeToCodeConstructAbility = JSC::ConstructAbility::CannotConstruct;
160const int s_readableStreamPipeToCodeLength = 2645;
161static const JSC::Intrinsic s_readableStreamPipeToCodeIntrinsic = JSC::NoIntrinsic;
162const char* const s_readableStreamPipeToCode =
163 "(function (destination)\n" \
164 "{\n" \
165 " \"use strict\";\n" \
166 "\n" \
167 " //\n" \
168 " //\n" \
169 " const options = arguments[1];\n" \
170 "\n" \
171 " //\n" \
172 " //\n" \
173 " //\n" \
174 "\n" \
175 " const preventClose = @isObject(options) && !!options.preventClose;\n" \
176 " const preventAbort = @isObject(options) && !!options.preventAbort;\n" \
177 " const preventCancel = @isObject(options) && !!options.preventCancel;\n" \
178 "\n" \
179 " const source = this;\n" \
180 "\n" \
181 " let reader;\n" \
182 " let lastRead;\n" \
183 " let lastWrite;\n" \
184 " let closedPurposefully = false;\n" \
185 " let promiseCapability;\n" \
186 "\n" \
187 " function doPipe() {\n" \
188 " lastRead = reader.read();\n" \
189 " @Promise.prototype.@then.@call(@Promise.all([lastRead, destination.ready]), function([{ value, done }]) {\n" \
190 " if (done)\n" \
191 " closeDestination();\n" \
192 " else if (destination.state === \"writable\") {\n" \
193 " lastWrite = destination.write(value);\n" \
194 " doPipe();\n" \
195 " }\n" \
196 " }, function(e) {\n" \
197 " throw e;\n" \
198 " });\n" \
199 " }\n" \
200 "\n" \
201 " function cancelSource(reason) {\n" \
202 " if (!preventCancel) {\n" \
203 " reader.cancel(reason);\n" \
204 " reader.releaseLock();\n" \
205 " promiseCapability.@reject.@call(@undefined, reason);\n" \
206 " } else {\n" \
207 " @Promise.prototype.@then.@call(lastRead, function() {\n" \
208 " reader.releaseLock();\n" \
209 " promiseCapability.@reject.@call(@undefined, reason);\n" \
210 " });\n" \
211 " }\n" \
212 " }\n" \
213 "\n" \
214 " function closeDestination() {\n" \
215 " reader.releaseLock();\n" \
216 "\n" \
217 " const destinationState = destination.state;\n" \
218 " if (!preventClose && (destinationState === \"waiting\" || destinationState === \"writable\")) {\n" \
219 " closedPurposefully = true;\n" \
220 " @Promise.prototype.@then.@call(destination.close(), promiseCapability.@resolve, promiseCapability.@reject);\n" \
221 " } else if (lastWrite !== @undefined)\n" \
222 " @Promise.prototype.@then.@call(lastWrite, promiseCapability.@resolve, promiseCapability.@reject);\n" \
223 " else\n" \
224 " promiseCapability.@resolve.@call();\n" \
225 "\n" \
226 " }\n" \
227 "\n" \
228 " function abortDestination(reason) {\n" \
229 " reader.releaseLock();\n" \
230 "\n" \
231 " if (!preventAbort)\n" \
232 " destination.abort(reason);\n" \
233 " promiseCapability.@reject.@call(@undefined, reason);\n" \
234 " }\n" \
235 "\n" \
236 " promiseCapability = @newPromiseCapability(@Promise);\n" \
237 "\n" \
238 " reader = source.getReader();\n" \
239 "\n" \
240 " @Promise.prototype.@then.@call(reader.closed, @undefined, abortDestination);\n" \
241 " @Promise.prototype.@then.@call(destination.closed,\n" \
242 " function() {\n" \
243 " if (!closedPurposefully)\n" \
244 " cancelSource(@makeTypeError('destination is closing or closed and cannot be piped to anymore'));\n" \
245 " },\n" \
246 " cancelSource\n" \
247 " );\n" \
248 "\n" \
249 " doPipe();\n" \
250 "\n" \
251 " return promiseCapability.@promise;\n" \
252 "})\n" \
253;
254
255const JSC::ConstructAbility s_readableStreamTeeCodeConstructAbility = JSC::ConstructAbility::CannotConstruct;
256const int s_readableStreamTeeCodeLength = 175;
257static const JSC::Intrinsic s_readableStreamTeeCodeIntrinsic = JSC::NoIntrinsic;
258const char* const s_readableStreamTeeCode =
259 "(function ()\n" \
260 "{\n" \
261 " \"use strict\";\n" \
262 "\n" \
263 " if (!@isReadableStream(this))\n" \
264 " throw @makeThisTypeError(\"ReadableStream\", \"tee\");\n" \
265 "\n" \
266 " return @readableStreamTee(this, false);\n" \
267 "})\n" \
268;
269
270const JSC::ConstructAbility s_readableStreamLockedCodeConstructAbility = JSC::ConstructAbility::CannotConstruct;
271const int s_readableStreamLockedCodeLength = 178;
272static const JSC::Intrinsic s_readableStreamLockedCodeIntrinsic = JSC::NoIntrinsic;
273const char* const s_readableStreamLockedCode =
274 "(function ()\n" \
275 "{\n" \
276 " \"use strict\";\n" \
277 "\n" \
278 " if (!@isReadableStream(this))\n" \
279 " throw @makeGetterTypeError(\"ReadableStream\", \"locked\");\n" \
280 "\n" \
281 " return @isReadableStreamLocked(this);\n" \
282 "})\n" \
283;
284
285
286#define DEFINE_BUILTIN_GENERATOR(codeName, functionName, overriddenName, argumentCount) \
287JSC::FunctionExecutable* codeName##Generator(JSC::VM& vm) \
288{\
289 JSVMClientData* clientData = static_cast<JSVMClientData*>(vm.clientData); \
290 return clientData->builtinFunctions().readableStreamBuiltins().codeName##Executable()->link(vm, nullptr, clientData->builtinFunctions().readableStreamBuiltins().codeName##Source(), WTF::nullopt, s_##codeName##Intrinsic); \
291}
292WEBCORE_FOREACH_READABLESTREAM_BUILTIN_CODE(DEFINE_BUILTIN_GENERATOR)
293#undef DEFINE_BUILTIN_GENERATOR
294
295
296} // namespace WebCore
297
298#endif // ENABLE(STREAMS_API)
299