aboutsummaryrefslogtreecommitdiff
path: root/src/bun.js/builtins/cpp/NodeEventsBuiltins.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/bun.js/builtins/cpp/NodeEventsBuiltins.cpp')
-rw-r--r--src/bun.js/builtins/cpp/NodeEventsBuiltins.cpp254
1 files changed, 254 insertions, 0 deletions
diff --git a/src/bun.js/builtins/cpp/NodeEventsBuiltins.cpp b/src/bun.js/builtins/cpp/NodeEventsBuiltins.cpp
new file mode 100644
index 000000000..1e26a934b
--- /dev/null
+++ b/src/bun.js/builtins/cpp/NodeEventsBuiltins.cpp
@@ -0,0 +1,254 @@
+/*
+ * Copyright (c) 2015 Igalia
+ * Copyright (c) 2015 Igalia S.L.
+ * Copyright (c) 2015 Igalia.
+ * Copyright (c) 2015, 2016 Canon Inc. All rights reserved.
+ * Copyright (c) 2015, 2016, 2017 Canon Inc.
+ * Copyright (c) 2016, 2020 Apple Inc. All rights reserved.
+ * Copyright (c) 2022 Codeblog Corp. 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 "NodeEventsBuiltins.h"
+
+#include "WebCoreJSClientData.h"
+#include <JavaScriptCore/HeapInlines.h>
+#include <JavaScriptCore/IdentifierInlines.h>
+#include <JavaScriptCore/ImplementationVisibility.h>
+#include <JavaScriptCore/Intrinsic.h>
+#include <JavaScriptCore/JSCJSValueInlines.h>
+#include <JavaScriptCore/JSCellInlines.h>
+#include <JavaScriptCore/StructureInlines.h>
+#include <JavaScriptCore/VM.h>
+
+namespace WebCore {
+
+const JSC::ConstructAbility s_nodeEventsOnAsyncIteratorCodeConstructAbility = JSC::ConstructAbility::CannotConstruct;
+const JSC::ConstructorKind s_nodeEventsOnAsyncIteratorCodeConstructorKind = JSC::ConstructorKind::None;
+const JSC::ImplementationVisibility s_nodeEventsOnAsyncIteratorCodeImplementationVisibility = JSC::ImplementationVisibility::Public;
+const int s_nodeEventsOnAsyncIteratorCodeLength = 4291;
+static const JSC::Intrinsic s_nodeEventsOnAsyncIteratorCodeIntrinsic = JSC::NoIntrinsic;
+const char* const s_nodeEventsOnAsyncIteratorCode =
+ "(function (emitter, event, options) {\n" \
+ " \"use strict\";\n" \
+ "\n" \
+ " var AbortError = class AbortError extends Error {\n" \
+ " constructor(message = \"The operation was aborted\", options = void 0) {\n" \
+ " if (options !== void 0 && typeof options !== \"object\") {\n" \
+ " throw new Error(`Invalid AbortError options:\\n" \
+ "\\n" \
+ "${JSON.stringify(options, null, 2)}`);\n" \
+ " }\n" \
+ " super(message, options);\n" \
+ " this.code = \"ABORT_ERR\";\n" \
+ " this.name = \"AbortError\";\n" \
+ " }\n" \
+ " };\n" \
+ "\n" \
+ " var { AbortSignal, Object, Number } = globalThis;\n" \
+ "\n" \
+ " if (@isUndefinedOrNull(options)) options = {};\n" \
+ "\n" \
+ " //\n" \
+ " var signal = options.signal;\n" \
+ " if (!@isUndefinedOrNull(signal) && !(signal instanceof AbortSignal))\n" \
+ " @throwTypeError(\"options.signal must be an AbortSignal\");\n" \
+ "\n" \
+ " if (signal?.aborted) {\n" \
+ " //\n" \
+ " throw new AbortError(@undefined, { cause: signal?.reason });\n" \
+ " }\n" \
+ "\n" \
+ " var highWatermark = options.highWatermark ?? Number.MAX_SAFE_INTEGER;\n" \
+ " if (highWatermark < 1) \n" \
+ " @throwRangeError(\"options.highWatermark must be >= 1\");\n" \
+ "\n" \
+ " var lowWatermark = options.lowWatermark ?? 1;\n" \
+ " if (lowWatermark < 1) \n" \
+ " @throwRangeError(\"options.lowWatermark must be >= 1\");\n" \
+ "\n" \
+ " var unconsumedEvents = @createFIFO();\n" \
+ " var unconsumedPromises = @createFIFO();\n" \
+ "\n" \
+ " var paused = false;\n" \
+ " var error = null;\n" \
+ " var finished = false;\n" \
+ " var size = 0;\n" \
+ "\n" \
+ " function abortListener() {\n" \
+ " errorHandler(new AbortError(@undefined, { cause: signal?.reason }));\n" \
+ " }\n" \
+ "\n" \
+ " function eventHandler(value) {\n" \
+ " if (unconsumedPromises.isEmpty()) {\n" \
+ " size++;\n" \
+ " if (!paused && size > highWatermark) {\n" \
+ " paused = true;\n" \
+ " emitter.pause();\n" \
+ " }\n" \
+ " unconsumedEvents.push(value);\n" \
+ " } else unconsumedPromises.shift().@resolve.@call(@undefined, { value, done: false });\n" \
+ " }\n" \
+ "\n" \
+ " function closeHandler() {\n" \
+ " removeAllListeners(listeners);\n" \
+ " finished = true;\n" \
+ " var doneResult = { value: @undefined, done: true };\n" \
+ " while (!unconsumedPromises.isEmpty()) {\n" \
+ " unconsumedPromises.shift().@resolve.@call(@undefined, doneResult);\n" \
+ " }\n" \
+ " \n" \
+ " return @createFulfilledPromise(doneResult);\n" \
+ " }\n" \
+ "\n" \
+ " function errorHandler(err) {\n" \
+ " if (unconsumedPromises.isEmpty()) error = err;\n" \
+ " else unconsumedPromises.shift().@reject.@call(@undefined, err);\n" \
+ " \n" \
+ " closeHandler();\n" \
+ " }\n" \
+ " \n" \
+ " function addEventListener(emitter, event, handler) {\n" \
+ " emitter.on(event, handler);\n" \
+ " @arrayPush(listeners, emitter, event, handler);\n" \
+ " }\n" \
+ " \n" \
+ " function removeAllListeners() {\n" \
+ " while (listeners.length > 0) {\n" \
+ " var [emitter, event, handler] = @arrayPop(listeners);\n" \
+ " emitter.off(event, handler);\n" \
+ " }\n" \
+ " }\n" \
+ "\n" \
+ " var iterator = async function* NodeEventsOnAsyncIterator() {\n" \
+ " //\n" \
+ " if (size) {\n" \
+ " var value = unconsumedEvents.shift();\n" \
+ " size--;\n" \
+ " if (paused && size < lowWatermark) {\n" \
+ " emitter.resume();\n" \
+ " paused = false;\n" \
+ " }\n" \
+ " yield @createFulfilledPromise({ value, done: false });\n" \
+ " }\n" \
+ "\n" \
+ " //\n" \
+ " //\n" \
+ " //\n" \
+ " if (error) {\n" \
+ " var p = @Promise.@reject(error);\n" \
+ " //\n" \
+ " error = null;\n" \
+ " yield p;\n" \
+ " }\n" \
+ "\n" \
+ " //\n" \
+ " if (finished) yield closeHandler();\n" \
+ "\n" \
+ " //\n" \
+ " var nextEventPromiseCapability = @newPromiseCapability(@Promise);\n" \
+ " unconsumedPromises.push(nextEventPromiseCapability);\n" \
+ " yield nextEventPromiseCapability.@promise;\n" \
+ " };\n" \
+ "\n" \
+ " //\n" \
+ " Object.defineProperties(iterator, {\n" \
+ " \"throw\": {\n" \
+ " value: (err) => {\n" \
+ " //\n" \
+ " if (err === undefined || err === null || !(err instanceof Error)) {\n" \
+ " @throwTypeError(\"The argument must be an instance of Error\");\n" \
+ " }\n" \
+ " errorHandler(err);\n" \
+ " },\n" \
+ " },\n" \
+ " \"return\": {\n" \
+ " value: () => {\n" \
+ " return closeHandler();\n" \
+ " }\n" \
+ " },\n" \
+ " //\n" \
+ " //\n" \
+ " //\n" \
+ " //\n" \
+ " //\n" \
+ " //\n" \
+ " //\n" \
+ " //\n" \
+ " //\n" \
+ " //\n" \
+ " //\n" \
+ " //\n" \
+ " //\n" \
+ " //\n" \
+ " //\n" \
+ " //\n" \
+ " //\n" \
+ " //\n" \
+ " //\n" \
+ " //\n" \
+ " //\n" \
+ " //\n" \
+ " //\n" \
+ " //\n" \
+ " //\n" \
+ " //\n" \
+ " });\n" \
+ "\n" \
+ " //\n" \
+ " var listeners = [];\n" \
+ " addEventListener(emitter, event, eventHandler);\n" \
+ " if (event !== \"error\" && typeof emitter.on === \"function\") {\n" \
+ " addEventListener(emitter, \"error\", errorHandler);\n" \
+ " }\n" \
+ " var closeEvents = options?.close;\n" \
+ " if (closeEvents?.length) {\n" \
+ " for (var i = 0; i < closeEvents.length; i++) {\n" \
+ " addEventListener(emitter, closeEvents[i], closeHandler);\n" \
+ " }\n" \
+ " }\n" \
+ "\n" \
+ " if (signal)\n" \
+ " signal.once(\"abort\", abortListener);\n" \
+ "\n" \
+ " return iterator;\n" \
+ "})\n" \
+;
+
+
+#define DEFINE_BUILTIN_GENERATOR(codeName, functionName, overriddenName, argumentCount) \
+JSC::FunctionExecutable* codeName##Generator(JSC::VM& vm) \
+{\
+ JSVMClientData* clientData = static_cast<JSVMClientData*>(vm.clientData); \
+ return clientData->builtinFunctions().nodeEventsBuiltins().codeName##Executable()->link(vm, nullptr, clientData->builtinFunctions().nodeEventsBuiltins().codeName##Source(), std::nullopt, s_##codeName##Intrinsic); \
+}
+WEBCORE_FOREACH_NODEEVENTS_BUILTIN_CODE(DEFINE_BUILTIN_GENERATOR)
+#undef DEFINE_BUILTIN_GENERATOR
+
+
+} // namespace WebCore