Merge pull request #546 from lightpanda-io/jsruntime_js_to_null_terminated_string

Support binding JS strings to [:0]const u8
This commit is contained in:
Pierre Tachoire
2025-04-22 09:11:36 +02:00
committed by GitHub
3 changed files with 35 additions and 35 deletions

View File

@@ -1925,7 +1925,13 @@ fn Caller(comptime E: type) type {
},
.slice => {
if (ptr.child == u8) {
return valueToString(self.call_allocator, js_value, self.isolate, self.context);
if (ptr.sentinel()) |s| {
if (comptime s == 0) {
return valueToStringZ(self.call_allocator, js_value, self.isolate, self.context);
}
} else {
return valueToString(self.call_allocator, js_value, self.isolate, self.context);
}
}
// TODO: TypedArray
@@ -2319,6 +2325,15 @@ fn valueToString(allocator: Allocator, value: v8.Value, isolate: v8.Isolate, con
return buf;
}
fn valueToStringZ(allocator: Allocator, value: v8.Value, isolate: v8.Isolate, context: v8.Context) ![:0]u8 {
const str = try value.toString(context);
const len = str.lenUtf8(isolate);
const buf = try allocator.allocSentinel(u8, len, 0);
const n = str.writeUtf8(isolate, buf);
std.debug.assert(n == len);
return buf;
}
const NoopInspector = struct {
pub fn onInspectorResponse(_: *anyopaque, _: u32, _: []const u8) void {}
pub fn onInspectorEvent(_: *anyopaque, _: []const u8) void {}