aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bench/snippets/buffer-create.mjs4
-rw-r--r--packages/bun-types/globals.d.ts2
-rw-r--r--src/bun.js/bindings/Process.cpp15
-rw-r--r--src/bun.js/bindings/exports.zig6
-rw-r--r--src/bun.js/bindings/headers-cpp.h2
-rw-r--r--src/bun.js/bindings/headers.h3
-rw-r--r--src/bun.js/node/types.zig17
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();