@@ -747,18 +747,9 @@ pub fn Env(comptime State: type, comptime WebApis: type) type {
747747 }
748748
749749 pub fn exec (self : * JsContext , src : []const u8 , name : ? []const u8 ) ! Value {
750- const isolate = self .isolate ;
751750 const v8_context = self .v8_context ;
752751
753- var origin : ? v8.ScriptOrigin = null ;
754- if (name ) | n | {
755- const scr_name = v8 .String .initUtf8 (isolate , n );
756- origin = v8 .ScriptOrigin .initDefault (scr_name .toValue ());
757- }
758- const scr_js = v8 .String .initUtf8 (isolate , src );
759- const scr = v8 .Script .compile (v8_context , scr_js , origin ) catch {
760- return error .CompilationError ;
761- };
752+ const scr = try compileScript (self .isolate , v8_context , src , name );
762753
763754 const value = scr .run (v8_context ) catch {
764755 return error .ExecutionError ;
@@ -2035,6 +2026,25 @@ pub fn Env(comptime State: type, comptime WebApis: type) type {
20352026 };
20362027 }
20372028
2029+ fn compileScript (isolate : v8.Isolate , ctx : v8.Context , src : []const u8 , name : ? []const u8 ) ! v8.Script {
2030+ // compile
2031+ const script_name = v8 .String .initUtf8 (isolate , name orelse "anonymous" );
2032+ const script_source = v8 .String .initUtf8 (isolate , src );
2033+
2034+ const origin = v8 .ScriptOrigin .initDefault (script_name .toValue ());
2035+
2036+ var script_comp_source : v8.ScriptCompilerSource = undefined ;
2037+ v8 .ScriptCompilerSource .init (& script_comp_source , script_source , origin , null );
2038+ defer script_comp_source .deinit ();
2039+
2040+ return v8 .ScriptCompiler .compile (
2041+ ctx ,
2042+ & script_comp_source ,
2043+ .kNoCompileOptions ,
2044+ .kNoCacheNoReason ,
2045+ ) catch return error .CompilationError ;
2046+ }
2047+
20382048 fn compileModule (isolate : v8.Isolate , src : []const u8 , name : []const u8 ) ! v8.Module {
20392049 // compile
20402050 const script_name = v8 .String .initUtf8 (isolate , name );
0 commit comments