use ScriptCompiler to compile script

This commit is contained in:
Pierre Tachoire
2025-07-12 12:09:16 -07:00
parent 98c8b7d2b0
commit 0dd664bfbf

View File

@@ -747,18 +747,9 @@ pub fn Env(comptime State: type, comptime WebApis: type) type {
} }
pub fn exec(self: *JsContext, src: []const u8, name: ?[]const u8) !Value { pub fn exec(self: *JsContext, src: []const u8, name: ?[]const u8) !Value {
const isolate = self.isolate;
const v8_context = self.v8_context; const v8_context = self.v8_context;
var origin: ?v8.ScriptOrigin = null; const scr = try compileScript(self.isolate, v8_context, src, name);
if (name) |n| {
const scr_name = v8.String.initUtf8(isolate, n);
origin = v8.ScriptOrigin.initDefault(scr_name.toValue());
}
const scr_js = v8.String.initUtf8(isolate, src);
const scr = v8.Script.compile(v8_context, scr_js, origin) catch {
return error.CompilationError;
};
const value = scr.run(v8_context) catch { const value = scr.run(v8_context) catch {
return error.ExecutionError; return error.ExecutionError;
@@ -2035,6 +2026,25 @@ pub fn Env(comptime State: type, comptime WebApis: type) type {
}; };
} }
fn compileScript(isolate: v8.Isolate, ctx: v8.Context, src: []const u8, name: ?[]const u8) !v8.Script {
// compile
const script_name = v8.String.initUtf8(isolate, name orelse "anonymous");
const script_source = v8.String.initUtf8(isolate, src);
const origin = v8.ScriptOrigin.initDefault(script_name.toValue());
var script_comp_source: v8.ScriptCompilerSource = undefined;
v8.ScriptCompilerSource.init(&script_comp_source, script_source, origin, null);
defer script_comp_source.deinit();
return v8.ScriptCompiler.compile(
ctx,
&script_comp_source,
.kNoCompileOptions,
.kNoCacheNoReason,
) catch return error.CompilationError;
}
fn compileModule(isolate: v8.Isolate, src: []const u8, name: []const u8) !v8.Module { fn compileModule(isolate: v8.Isolate, src: []const u8, name: []const u8) !v8.Module {
// compile // compile
const script_name = v8.String.initUtf8(isolate, name); const script_name = v8.String.initUtf8(isolate, name);