aboutsummaryrefslogtreecommitdiff
path: root/src/bun.js/builtins/cpp/ConsoleObjectBuiltins.cpp
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-12-05 11:35:34 -0800
committerGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-12-05 11:35:34 -0800
commit0ea8de40871052842f2e342b4c452f6746691487 (patch)
treea4e1028f90a801324966172e47b9b20533e4ad7a /src/bun.js/builtins/cpp/ConsoleObjectBuiltins.cpp
parent71293033474eea83c47b6c6948f991b1dc37ad22 (diff)
downloadbun-0ea8de40871052842f2e342b4c452f6746691487.tar.gz
bun-0ea8de40871052842f2e342b4c452f6746691487.tar.zst
bun-0ea8de40871052842f2e342b4c452f6746691487.zip
Make `console` an `AsyncIterable`
Diffstat (limited to 'src/bun.js/builtins/cpp/ConsoleObjectBuiltins.cpp')
-rw-r--r--src/bun.js/builtins/cpp/ConsoleObjectBuiltins.cpp167
1 files changed, 167 insertions, 0 deletions
diff --git a/src/bun.js/builtins/cpp/ConsoleObjectBuiltins.cpp b/src/bun.js/builtins/cpp/ConsoleObjectBuiltins.cpp
new file mode 100644
index 000000000..39080d690
--- /dev/null
+++ b/src/bun.js/builtins/cpp/ConsoleObjectBuiltins.cpp
@@ -0,0 +1,167 @@
+/*
+ * 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, 2018 -2018 Apple Inc. All rights reserved.
+ * 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 "ConsoleObjectBuiltins.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_consoleObjectAsyncIteratorCodeConstructAbility = JSC::ConstructAbility::CannotConstruct;
+const JSC::ConstructorKind s_consoleObjectAsyncIteratorCodeConstructorKind = JSC::ConstructorKind::None;
+const JSC::ImplementationVisibility s_consoleObjectAsyncIteratorCodeImplementationVisibility = JSC::ImplementationVisibility::Public;
+const int s_consoleObjectAsyncIteratorCodeLength = 2004;
+static const JSC::Intrinsic s_consoleObjectAsyncIteratorCodeIntrinsic = JSC::NoIntrinsic;
+const char* const s_consoleObjectAsyncIteratorCode =
+ "(function () {\n" \
+ " \"use strict\";\n" \
+ "\n" \
+ " const Iterator = async function* ConsoleAsyncIterator() {\n" \
+ " \"use strict\";\n" \
+ "\n" \
+ " const stream = @Bun.stdin.stream();\n" \
+ " var reader = stream.getReader();\n" \
+ "\n" \
+ " //\n" \
+ " var decoder = new globalThis.TextDecoder(\"utf-8\", { fatal: false });\n" \
+ " var deferredError;\n" \
+ " var indexOf = @Bun.indexOfLine;\n" \
+ "\n" \
+ " try {\n" \
+ " while (true) {\n" \
+ " var done, value;\n" \
+ " var pendingChunk;\n" \
+ " const firstResult = reader.readMany();\n" \
+ " if (@isPromise(firstResult)) {\n" \
+ " ({done, value} = await firstResult);\n" \
+ " } else {\n" \
+ " ({done, value} = firstResult);\n" \
+ " }\n" \
+ "\n" \
+ " if (done) {\n" \
+ " if (pendingChunk) {\n" \
+ " yield decoder.decode(pendingChunk);\n" \
+ " }\n" \
+ " return;\n" \
+ " }\n" \
+ " \n" \
+ " var actualChunk;\n" \
+ " //\n" \
+ " for (const chunk of value) {\n" \
+ " actualChunk = chunk;\n" \
+ " if (pendingChunk) {\n" \
+ " actualChunk = Buffer.concat([pendingChunk, chunk]);\n" \
+ " pendingChunk = null;\n" \
+ " }\n" \
+ "\n" \
+ " var last = 0;\n" \
+ " //\n" \
+ " var i = indexOf(actualChunk, last);\n" \
+ " while (i !== -1) {\n" \
+ " yield decoder.decode(actualChunk.subarray(last, i));\n" \
+ " last = i + 1;\n" \
+ " i = indexOf(actualChunk, last);\n" \
+ " }\n" \
+ "\n" \
+ " pendingChunk = actualChunk.subarray(last);\n" \
+ " }\n" \
+ " }\n" \
+ " } catch(e) {\n" \
+ " deferredError = e;\n" \
+ " } finally {\n" \
+ " reader.releaseLock();\n" \
+ "\n" \
+ " if (deferredError) {\n" \
+ " throw deferredError;\n" \
+ " }\n" \
+ " }\n" \
+ " };\n" \
+ "\n" \
+ " const symbol = globalThis.Symbol.asyncIterator;\n" \
+ " this[symbol] = Iterator;\n" \
+ " return Iterator();\n" \
+ "})\n" \
+;
+
+const JSC::ConstructAbility s_consoleObjectWriteCodeConstructAbility = JSC::ConstructAbility::CannotConstruct;
+const JSC::ConstructorKind s_consoleObjectWriteCodeConstructorKind = JSC::ConstructorKind::None;
+const JSC::ImplementationVisibility s_consoleObjectWriteCodeImplementationVisibility = JSC::ImplementationVisibility::Public;
+const int s_consoleObjectWriteCodeLength = 524;
+static const JSC::Intrinsic s_consoleObjectWriteCodeIntrinsic = JSC::NoIntrinsic;
+const char* const s_consoleObjectWriteCode =
+ "(function (input) {\n" \
+ " \"use strict\";\n" \
+ "\n" \
+ " var writer = @getByIdDirectPrivate(this, \"writer\");\n" \
+ " if (!writer) {\n" \
+ " var length = @toLength(input?.length ?? 0);\n" \
+ " writer = @Bun.stdout.writer({highWaterMark: length > 65536 ? length : 65536});\n" \
+ " @putByIdDirectPrivate(this, \"writer\", writer);\n" \
+ " }\n" \
+ "\n" \
+ " var wrote = writer.write(input);\n" \
+ "\n" \
+ " const count = @argumentCount();\n" \
+ " for (var i = 1; i < count; i++) {\n" \
+ " wrote += writer.write(@argument(i));\n" \
+ " }\n" \
+ "\n" \
+ " writer.flush(true);\n" \
+ " return wrote;\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().consoleObjectBuiltins().codeName##Executable()->link(vm, nullptr, clientData->builtinFunctions().consoleObjectBuiltins().codeName##Source(), std::nullopt, s_##codeName##Intrinsic); \
+}
+WEBCORE_FOREACH_CONSOLEOBJECT_BUILTIN_CODE(DEFINE_BUILTIN_GENERATOR)
+#undef DEFINE_BUILTIN_GENERATOR
+
+
+} // namespace WebCore