mirror of
https://github.com/lightpanda-io/browser.git
synced 2025-10-29 07:03:29 +00:00
Merge pull request #641 from lightpanda-io/js_debug_helpers
Make Callback.printFunc public
This commit is contained in:
@@ -870,7 +870,7 @@ pub fn Env(comptime State: type, comptime WebApis: type) type {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// debug/helper to print the source of the JS callback
|
// debug/helper to print the source of the JS callback
|
||||||
fn printFunc(self: Callback) !void {
|
pub fn printFunc(self: Callback) !void {
|
||||||
const scope = self.scope;
|
const scope = self.scope;
|
||||||
const value = self.func.castToFunction().toValue();
|
const value = self.func.castToFunction().toValue();
|
||||||
const src = try valueToString(scope.call_arena, value, scope.isolate, scope.context);
|
const src = try valueToString(scope.call_arena, value, scope.isolate, scope.context);
|
||||||
@@ -2064,6 +2064,11 @@ fn Caller(comptime E: type, comptime State: type) type {
|
|||||||
const last_js_parameter = params_to_map.len - 1;
|
const last_js_parameter = params_to_map.len - 1;
|
||||||
var is_variadic = false;
|
var is_variadic = false;
|
||||||
|
|
||||||
|
errdefer |err| if (std.log.logEnabled(.debug, .js)) {
|
||||||
|
const args_dump = self.dumpFunctionArgs(info) catch "failed to serialize args";
|
||||||
|
log.debug("Failed to call '{s}'. Error: {}.\nArgs:\n{s}", .{ named_function.full_name, err, args_dump });
|
||||||
|
};
|
||||||
|
|
||||||
{
|
{
|
||||||
// This is going to get complicated. If the last Zig paremeter
|
// This is going to get complicated. If the last Zig paremeter
|
||||||
// is a slice AND the corresponding javascript parameter is
|
// is a slice AND the corresponding javascript parameter is
|
||||||
@@ -2582,6 +2587,22 @@ fn Caller(comptime E: type, comptime State: type) type {
|
|||||||
fn isJsThis(comptime T: type) bool {
|
fn isJsThis(comptime T: type) bool {
|
||||||
return @typeInfo(T) == .@"struct" and @hasDecl(T, "_JSTHIS_ID_KLUDGE");
|
return @typeInfo(T) == .@"struct" and @hasDecl(T, "_JSTHIS_ID_KLUDGE");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn dumpFunctionArgs(self: *const Self, info: anytype) ![]const u8 {
|
||||||
|
const isolate = self.isolate;
|
||||||
|
const context = self.context;
|
||||||
|
const arena = self.call_arena;
|
||||||
|
const js_parameter_count = info.length();
|
||||||
|
|
||||||
|
var arr: std.ArrayListUnmanaged(u8) = .{};
|
||||||
|
for (0..js_parameter_count) |i| {
|
||||||
|
const js_value = info.getArg(@intCast(i));
|
||||||
|
const value_string = try valueToDetailString(arena, js_value, isolate, context);
|
||||||
|
const value_type = try jsStringToZig(arena, try js_value.typeOf(isolate), isolate);
|
||||||
|
try std.fmt.format(arr.writer(arena), "{d}: {s} ({s})\n", .{ i + 1, value_string, value_type });
|
||||||
|
}
|
||||||
|
return arr.items;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2858,13 +2879,14 @@ const TaggedAnyOpaque = struct {
|
|||||||
subtype: ?SubType,
|
subtype: ?SubType,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
fn valueToDetailString(allocator: Allocator, value: v8.Value, isolate: v8.Isolate, context: v8.Context) ![]u8 {
|
||||||
|
const str = try value.toDetailString(context);
|
||||||
|
return jsStringToZig(allocator, str, isolate);
|
||||||
|
}
|
||||||
|
|
||||||
fn valueToString(allocator: Allocator, value: v8.Value, isolate: v8.Isolate, context: v8.Context) ![]u8 {
|
fn valueToString(allocator: Allocator, value: v8.Value, isolate: v8.Isolate, context: v8.Context) ![]u8 {
|
||||||
const str = try value.toString(context);
|
const str = try value.toString(context);
|
||||||
const len = str.lenUtf8(isolate);
|
return jsStringToZig(allocator, str, isolate);
|
||||||
const buf = try allocator.alloc(u8, len);
|
|
||||||
const n = str.writeUtf8(isolate, buf);
|
|
||||||
std.debug.assert(n == len);
|
|
||||||
return buf;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn valueToStringZ(allocator: Allocator, value: v8.Value, isolate: v8.Isolate, context: v8.Context) ![:0]u8 {
|
fn valueToStringZ(allocator: Allocator, value: v8.Value, isolate: v8.Isolate, context: v8.Context) ![:0]u8 {
|
||||||
@@ -2876,6 +2898,14 @@ fn valueToStringZ(allocator: Allocator, value: v8.Value, isolate: v8.Isolate, co
|
|||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn jsStringToZig(allocator: Allocator, str: v8.String, isolate: v8.Isolate) ![]u8 {
|
||||||
|
const len = str.lenUtf8(isolate);
|
||||||
|
const buf = try allocator.alloc(u8, len);
|
||||||
|
const n = str.writeUtf8(isolate, buf);
|
||||||
|
std.debug.assert(n == len);
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
|
||||||
const NoopInspector = struct {
|
const NoopInspector = struct {
|
||||||
pub fn onInspectorResponse(_: *anyopaque, _: u32, _: []const u8) void {}
|
pub fn onInspectorResponse(_: *anyopaque, _: u32, _: []const u8) void {}
|
||||||
pub fn onInspectorEvent(_: *anyopaque, _: []const u8) void {}
|
pub fn onInspectorEvent(_: *anyopaque, _: []const u8) void {}
|
||||||
|
|||||||
Reference in New Issue
Block a user