diff options
author | 2022-12-13 19:16:51 -0800 | |
---|---|---|
committer | 2022-12-13 19:16:51 -0800 | |
commit | 5516adec57d5cee29e636ca43b4155e6279c7e1d (patch) | |
tree | 5e50f88e229185055671acb5ab9adb3e941bdb0d /src/bun.js/builtins/cpp/ProcessObjectInternalsBuiltins.cpp | |
parent | 4e920d73b72e94d0974166a88f375a26cbc0618c (diff) | |
download | bun-5516adec57d5cee29e636ca43b4155e6279c7e1d.tar.gz bun-5516adec57d5cee29e636ca43b4155e6279c7e1d.tar.zst bun-5516adec57d5cee29e636ca43b4155e6279c7e1d.zip |
Avoid creating closure
Diffstat (limited to 'src/bun.js/builtins/cpp/ProcessObjectInternalsBuiltins.cpp')
-rw-r--r-- | src/bun.js/builtins/cpp/ProcessObjectInternalsBuiltins.cpp | 88 |
1 files changed, 40 insertions, 48 deletions
diff --git a/src/bun.js/builtins/cpp/ProcessObjectInternalsBuiltins.cpp b/src/bun.js/builtins/cpp/ProcessObjectInternalsBuiltins.cpp index bcb4611ff..c95df0649 100644 --- a/src/bun.js/builtins/cpp/ProcessObjectInternalsBuiltins.cpp +++ b/src/bun.js/builtins/cpp/ProcessObjectInternalsBuiltins.cpp @@ -473,17 +473,19 @@ const char* const s_processObjectInternalsGetStdioWriteStreamCode = const JSC::ConstructAbility s_processObjectInternalsGetStdinStreamCodeConstructAbility = JSC::ConstructAbility::CannotConstruct; const JSC::ConstructorKind s_processObjectInternalsGetStdinStreamCodeConstructorKind = JSC::ConstructorKind::None; const JSC::ImplementationVisibility s_processObjectInternalsGetStdinStreamCodeImplementationVisibility = JSC::ImplementationVisibility::Public; -const int s_processObjectInternalsGetStdinStreamCodeLength = 4099; +const int s_processObjectInternalsGetStdinStreamCodeLength = 3773; static const JSC::Intrinsic s_processObjectInternalsGetStdinStreamCodeIntrinsic = JSC::NoIntrinsic; const char* const s_processObjectInternalsGetStdinStreamCode = "(function (fd, rawRequire, Bun) {\n" \ " var module = { path: \"node:process\", require: rawRequire };\n" \ " var require = (path) => module.require(path);\n" \ "\n" \ - " var { Readable, Duplex, eos, destroy } = require(\"node:stream\");\n" \ + " var { Duplex, eos, destroy } = require(\"node:stream\");\n" \ "\n" \ " var StdinStream = class StdinStream extends Duplex {\n" \ - " #readStream;\n" \ + " #reader;\n" \ + " //\n" \ + " #readRef;\n" \ " #writeStream;\n" \ "\n" \ " #readable = true;\n" \ @@ -492,7 +494,6 @@ const char* const s_processObjectInternalsGetStdinStreamCode = " #onFinish;\n" \ " #onClose;\n" \ " #onDrain;\n" \ - " #onReadable;\n" \ "\n" \ " get isTTY() {\n" \ " return require(\"tty\").isatty(fd);\n" \ @@ -502,10 +503,13 @@ const char* const s_processObjectInternalsGetStdinStreamCode = " return fd_;\n" \ " }\n" \ "\n" \ + " //\n" \ + " _construct(callback) {\n" \ + " callback();\n" \ + " }\n" \ + "\n" \ " constructor() {\n" \ " super({ readable: true, writable: true });\n" \ - "\n" \ - " this.#onReadable = (...args) => this._read(...args);\n" \ " }\n" \ "\n" \ " #onFinished(err) {\n" \ @@ -548,63 +552,51 @@ const char* const s_processObjectInternalsGetStdinStreamCode = " callback(err);\n" \ " } else {\n" \ " this.#onClose = callback;\n" \ - " if (this.#readStream) destroy(this.#readStream, err);\n" \ " if (this.#writeStream) destroy(this.#writeStream, err);\n" \ " }\n" \ " }\n" \ "\n" \ - " on(ev, cb) {\n" \ - " super.on(ev, cb);\n" \ - " if (!this.#readStream && (ev === \"readable\" || ev === \"data\")) {\n" \ - " this.#loadReadStream();\n" \ - " }\n" \ + " pause() {\n" \ + " this.unref();\n" \ + " return super.pause();\n" \ + " }\n" \ "\n" \ - " return this;\n" \ + " resume() {\n" \ + " this.#reader = Bun.stdin.stream().getReader();\n" \ + " this.ref();\n" \ + " return super.resume();\n" \ " }\n" \ "\n" \ - " once(ev, cb) {\n" \ - " super.once(ev, cb);\n" \ - " if (!this.#readStream && (ev === \"readable\" || ev === \"data\")) {\n" \ - " this.#loadReadStream();\n" \ + " ref() {\n" \ + " this.#readRef ??= setInterval(() => {}, 1 << 30);\n" \ + " }\n" \ + " unref() {\n" \ + " if (this.#readRef) {\n" \ + " clearInterval(this.#readRef);\n" \ + " this.#readRef = null;\n" \ " }\n" \ - "\n" \ - " return this;\n" \ " }\n" \ "\n" \ - " #loadReadStream() {\n" \ - " var readStream = (this.#readStream = Readable.fromWeb(\n" \ - " Bun.stdin.stream(),\n" \ - " ));\n" \ - "\n" \ - " readStream.on(\"data\", (data) => {\n" \ - " this.push(data);\n" \ - " });\n" \ - " readStream.ref();\n" \ - "\n" \ - " readStream.on(\"end\", () => {\n" \ - " this.push(null);\n" \ - " });\n" \ + " async #readInternal() {\n" \ + " try {\n" \ + " const { done, value } = await this.#reader.read();\n" \ "\n" \ - " eos(readStream, (err) => {\n" \ - " this.#readable = false;\n" \ - " if (err) {\n" \ - " destroy(readStream, err);\n" \ + " if (!done) {\n" \ + " this.push(value);\n" \ + " } else {\n" \ + " this.push(null);\n" \ + " this.pause();\n" \ + " this.#readable = false;\n" \ + " this.#onFinished();\n" \ " }\n" \ + " } catch (err) {\n" \ + " this.#readable = false;\n" \ " this.#onFinished(err);\n" \ - " });\n" \ - " }\n" \ - "\n" \ - " ref() {\n" \ - " this.#readStream?.ref?.();\n" \ - " }\n" \ - " unref() {\n" \ - " this.#readStream?.unref?.();\n" \ + " }\n" \ " }\n" \ "\n" \ - " _read(encoding, callback) {\n" \ - " if (!this.#readStream) this.#loadReadStream();\n" \ - "\n" \ - " return this.#readStream._read(...arguments);\n" \ + " _read(size) {\n" \ + " this.#readInternal();\n" \ " }\n" \ "\n" \ " #constructWriteStream() {\n" \ |