diff options
author | 2023-01-21 23:52:51 -0800 | |
---|---|---|
committer | 2023-01-21 23:52:51 -0800 | |
commit | 5ce2b8e604047d99c0ff33a41194c6f4d0d23c39 (patch) | |
tree | acfc59203af1aa5652c96eff26e22a22f4eb1e6f | |
parent | ee9893c4e193a84f71f122b85cf2b8d91e3303d5 (diff) | |
download | bun-5ce2b8e604047d99c0ff33a41194c6f4d0d23c39.tar.gz bun-5ce2b8e604047d99c0ff33a41194c6f4d0d23c39.tar.zst bun-5ce2b8e604047d99c0ff33a41194c6f4d0d23c39.zip |
Implement `process.execArgv`
-rw-r--r-- | bench/snippets/buffer-create.mjs | 4 | ||||
-rw-r--r-- | packages/bun-types/globals.d.ts | 2 | ||||
-rw-r--r-- | src/bun.js/bindings/Process.cpp | 15 | ||||
-rw-r--r-- | src/bun.js/bindings/exports.zig | 6 | ||||
-rw-r--r-- | src/bun.js/bindings/headers-cpp.h | 2 | ||||
-rw-r--r-- | src/bun.js/bindings/headers.h | 3 | ||||
-rw-r--r-- | src/bun.js/node/types.zig | 17 |
7 files changed, 44 insertions, 5 deletions
diff --git a/bench/snippets/buffer-create.mjs b/bench/snippets/buffer-create.mjs index f19827b2d..28eb4ce0f 100644 --- a/bench/snippets/buffer-create.mjs +++ b/bench/snippets/buffer-create.mjs @@ -21,8 +21,8 @@ bench("Buffer.from(Uint8Array(0))", () => { return Buffer.from(empty); }); -bench("Buffer.from(Uint8Array(0))", () => { - return Buffer.from(empty); +bench("new Buffer(Uint8Array(0))", () => { + return new Buffer(empty); }); bench(`new Buffer(${N})`, () => { diff --git a/packages/bun-types/globals.d.ts b/packages/bun-types/globals.d.ts index 5718f62e4..8113c554e 100644 --- a/packages/bun-types/globals.d.ts +++ b/packages/bun-types/globals.d.ts @@ -344,7 +344,7 @@ interface Process { arch: Architecture; platform: Platform; argv: string[]; - // execArgv: string[]; + execArgv: string[]; env: Bun.Env; /** Whether you are using Bun */ diff --git a/src/bun.js/bindings/Process.cpp b/src/bun.js/bindings/Process.cpp index 085010e06..bce4db8a6 100644 --- a/src/bun.js/bindings/Process.cpp +++ b/src/bun.js/bindings/Process.cpp @@ -572,6 +572,18 @@ JSC_DEFINE_CUSTOM_GETTER(Process_lazyArgv0Getter, (JSC::JSGlobalObject * globalO return ret; } +JSC_DEFINE_CUSTOM_GETTER(Process_lazyExecArgvGetter, (JSC::JSGlobalObject * globalObject, JSC::EncodedJSValue thisValue, JSC::PropertyName name)) +{ + JSC::JSObject* thisObject = JSValue::decode(thisValue).getObject(); + EncodedJSValue ret = Bun__Process__getExecArgv(globalObject); + + if (LIKELY(thisObject)) { + thisObject->putDirect(globalObject->vm(), name, JSValue::decode(ret), 0); + } + + return ret; +} + JSC_DEFINE_CUSTOM_GETTER(Process_lazyExecPathGetter, (JSC::JSGlobalObject * globalObject, JSC::EncodedJSValue thisValue, JSC::PropertyName name)) { JSC::JSObject* thisObject = JSValue::decode(thisValue).getObject(); @@ -703,6 +715,9 @@ void Process::finishCreation(JSC::VM& vm) this->putDirectCustomAccessor(vm, JSC::PropertyName(JSC::Identifier::fromString(vm, "execPath"_s)), JSC::CustomGetterSetter::create(vm, Process_lazyExecPathGetter, Process_defaultSetter), 0); + this->putDirectCustomAccessor(vm, JSC::PropertyName(JSC::Identifier::fromString(vm, "execArgv"_s)), + JSC::CustomGetterSetter::create(vm, Process_lazyExecArgvGetter, Process_defaultSetter), 0); + this->putDirectNativeFunction(vm, globalObject, JSC::Identifier::fromString(this->vm(), "uptime"_s), 0, Process_functionUptime, ImplementationVisibility::Public, NoIntrinsic, 0); diff --git a/src/bun.js/bindings/exports.zig b/src/bun.js/bindings/exports.zig index 54d855d23..b9dd350a6 100644 --- a/src/bun.js/bindings/exports.zig +++ b/src/bun.js/bindings/exports.zig @@ -385,6 +385,7 @@ pub const Process = extern struct { pub const exit = JSC.Node.Process.exit; pub const getArgv0 = JSC.Node.Process.getArgv0; pub const getExecPath = JSC.Node.Process.getExecPath; + pub const getExecArgv = JSC.Node.Process.getExecArgv; pub const Export = shim.exportFunctions(.{ .getTitle = getTitle, @@ -395,6 +396,7 @@ pub const Process = extern struct { .exit = exit, .getArgv0 = getArgv0, .getExecPath = getExecPath, + .getExecArgv = getExecArgv, }); comptime { @@ -423,6 +425,10 @@ pub const Process = extern struct { @export(getExecPath, .{ .name = Export[7].symbol_name, }); + + @export(getExecArgv, .{ + .name = Export[8].symbol_name, + }); } } }; diff --git a/src/bun.js/bindings/headers-cpp.h b/src/bun.js/bindings/headers-cpp.h index 969134e50..f13fba3d3 100644 --- a/src/bun.js/bindings/headers-cpp.h +++ b/src/bun.js/bindings/headers-cpp.h @@ -1,4 +1,4 @@ -//-- AUTOGENERATED FILE -- 1674359227 +//-- AUTOGENERATED FILE -- 1674373581 // clang-format off #pragma once diff --git a/src/bun.js/bindings/headers.h b/src/bun.js/bindings/headers.h index 269698a98..836c7d46e 100644 --- a/src/bun.js/bindings/headers.h +++ b/src/bun.js/bindings/headers.h @@ -1,5 +1,5 @@ // clang-format off -//-- AUTOGENERATED FILE -- 1674359227 +//-- AUTOGENERATED FILE -- 1674373581 #pragma once #include <stddef.h> @@ -692,6 +692,7 @@ ZIG_DECL void Bun__Process__exit(JSC__JSGlobalObject* arg0, int32_t arg1); ZIG_DECL JSC__JSValue Bun__Process__getArgv(JSC__JSGlobalObject* arg0); ZIG_DECL JSC__JSValue Bun__Process__getArgv0(JSC__JSGlobalObject* arg0); ZIG_DECL JSC__JSValue Bun__Process__getCwd(JSC__JSGlobalObject* arg0); +ZIG_DECL JSC__JSValue Bun__Process__getExecArgv(JSC__JSGlobalObject* arg0); ZIG_DECL JSC__JSValue Bun__Process__getExecPath(JSC__JSGlobalObject* arg0); ZIG_DECL void Bun__Process__getTitle(JSC__JSGlobalObject* arg0, ZigString* arg1); ZIG_DECL JSC__JSValue Bun__Process__setCwd(JSC__JSGlobalObject* arg0, ZigString* arg1); diff --git a/src/bun.js/node/types.zig b/src/bun.js/node/types.zig index dc763ebb5..038c7e6a0 100644 --- a/src/bun.js/node/types.zig +++ b/src/bun.js/node/types.zig @@ -1892,6 +1892,23 @@ pub const Process = struct { return JSC.ZigString.fromUTF8(out).toValueGC(globalObject); } + pub fn getExecArgv(globalObject: *JSC.JSGlobalObject) callconv(.C) JSC.JSValue { + const allocator = globalObject.allocator(); + var args = allocator.alloc( + JSC.ZigString, + // argv omits "bun" because it could be "bun run" or "bun" and it's kind of ambiguous + // argv also omits the script name + std.os.argv.len, + ) catch unreachable; + defer allocator.free(args); + + for (std.os.argv) |arg, i| { + args[i] = JSC.ZigString.fromUTF8(bun.span(arg)); + } + + return JSC.JSValue.createStringArray(globalObject, args.ptr, args.len, true); + } + pub fn getArgv(globalObject: *JSC.JSGlobalObject) callconv(.C) JSC.JSValue { var vm = globalObject.bunVM(); |