mirror of
https://github.com/lightpanda-io/browser.git
synced 2025-10-29 07:03:29 +00:00
Merge pull request #1154 from lightpanda-io/module_evalute_error_handling
Some checks failed
e2e-test / zig build release (push) Has been cancelled
zig-test / zig build dev (push) Has been cancelled
zig-test / zig test (push) Has been cancelled
e2e-test / demo-scripts (push) Has been cancelled
e2e-test / cdp-and-hyperfine-bench (push) Has been cancelled
e2e-test / perf-fmt (push) Has been cancelled
zig-test / browser fetch (push) Has been cancelled
zig-test / perf-fmt (push) Has been cancelled
nightly build / build-linux-x86_64 (push) Has been cancelled
nightly build / build-linux-aarch64 (push) Has been cancelled
nightly build / build-macos-aarch64 (push) Has been cancelled
nightly build / build-macos-x86_64 (push) Has been cancelled
wpt / web platform tests json output (push) Has been cancelled
wpt / perf-fmt (push) Has been cancelled
Some checks failed
e2e-test / zig build release (push) Has been cancelled
zig-test / zig build dev (push) Has been cancelled
zig-test / zig test (push) Has been cancelled
e2e-test / demo-scripts (push) Has been cancelled
e2e-test / cdp-and-hyperfine-bench (push) Has been cancelled
e2e-test / perf-fmt (push) Has been cancelled
zig-test / browser fetch (push) Has been cancelled
zig-test / perf-fmt (push) Has been cancelled
nightly build / build-linux-x86_64 (push) Has been cancelled
nightly build / build-linux-aarch64 (push) Has been cancelled
nightly build / build-macos-aarch64 (push) Has been cancelled
nightly build / build-macos-x86_64 (push) Has been cancelled
wpt / web platform tests json output (push) Has been cancelled
wpt / perf-fmt (push) Has been cancelled
Handle (log) module evaluation errors directly
This commit is contained in:
@@ -271,7 +271,18 @@ pub fn module(self: *Context, comptime want_result: bool, src: []const u8, url:
|
|||||||
return error.ModuleInstantiationError;
|
return error.ModuleInstantiationError;
|
||||||
}
|
}
|
||||||
|
|
||||||
const evaluated = try m.evaluate(v8_context);
|
const evaluated = m.evaluate(v8_context) catch {
|
||||||
|
std.debug.assert(m.getStatus() == .kErrored);
|
||||||
|
|
||||||
|
// Some module-loading errors aren't handled by TryCatch. We need to
|
||||||
|
// get the error from the module itself.
|
||||||
|
log.warn(.js, "evaluate module", .{
|
||||||
|
.specifier = owned_url,
|
||||||
|
.message = self.valueToString(m.getException(), .{}) catch "???",
|
||||||
|
});
|
||||||
|
return error.EvaluationError;
|
||||||
|
};
|
||||||
|
|
||||||
// https://v8.github.io/api/head/classv8_1_1Module.html#a1f1758265a4082595757c3251bb40e0f
|
// https://v8.github.io/api/head/classv8_1_1Module.html#a1f1758265a4082595757c3251bb40e0f
|
||||||
// Must be a promise that gets returned here.
|
// Must be a promise that gets returned here.
|
||||||
std.debug.assert(evaluated.isPromise());
|
std.debug.assert(evaluated.isPromise());
|
||||||
@@ -1206,13 +1217,21 @@ fn _resolveModuleCallback(self: *Context, referrer: v8.Module, specifier: []cons
|
|||||||
defer try_catch.deinit();
|
defer try_catch.deinit();
|
||||||
|
|
||||||
const entry = self.module(true, fetch_result.src(), normalized_specifier, true) catch |err| {
|
const entry = self.module(true, fetch_result.src(), normalized_specifier, true) catch |err| {
|
||||||
log.warn(.js, "compile resolved module", .{
|
switch (err) {
|
||||||
|
error.EvaluationError => {
|
||||||
|
// This is a sentinel value telling us that the error was already
|
||||||
|
// logged. Some module-loading errors aren't captured by Try/Catch.
|
||||||
|
// We need to handle those errors differently, where the module
|
||||||
|
// exists.
|
||||||
|
},
|
||||||
|
else => log.warn(.js, "compile resolved module", .{
|
||||||
.specifier = normalized_specifier,
|
.specifier = normalized_specifier,
|
||||||
.stack = try_catch.stack(self.call_arena) catch null,
|
.stack = try_catch.stack(self.call_arena) catch null,
|
||||||
.src = try_catch.sourceLine(self.call_arena) catch "err",
|
.src = try_catch.sourceLine(self.call_arena) catch "err",
|
||||||
.line = try_catch.sourceLineNumber() orelse 0,
|
.line = try_catch.sourceLineNumber() orelse 0,
|
||||||
.exception = (try_catch.exception(self.call_arena) catch @errorName(err)) orelse @errorName(err),
|
.exception = (try_catch.exception(self.call_arena) catch @errorName(err)) orelse @errorName(err),
|
||||||
});
|
}),
|
||||||
|
}
|
||||||
return null;
|
return null;
|
||||||
};
|
};
|
||||||
// entry.module is always set when returning from self.module()
|
// entry.module is always set when returning from self.module()
|
||||||
|
|||||||
Reference in New Issue
Block a user