@@ -264,10 +264,9 @@ pub fn Env(comptime S: type, comptime types: anytype) type {
264264 const templates = & self .templates ;
265265
266266 // The global FunctionTemplate (i.e. Window).
267- // env.generateClass(@field(types, s.name))
268- const globals = v8 .Persistent (v8 .FunctionTemplate ).init (isolate , v8 .FunctionTemplate .initDefault (isolate )).castToFunctionTemplate ();
267+ const globals = v8 .FunctionTemplate .initDefault (isolate );
269268
270- const global_template = v8 . Persistent ( v8 . ObjectTemplate ). init ( isolate , globals .getInstanceTemplate ()). castToObjectTemplate ();
269+ const global_template = globals .getInstanceTemplate ();
271270 global_template .setInternalFieldCount (1 );
272271 self .attachClass (Global , globals );
273272
@@ -752,6 +751,7 @@ pub fn Env(comptime S: type, comptime types: anytype) type {
752751
753752 // @intFromPtr of our Executor is stored in this context, so given
754753 // a context, we can always get the Executor back.
754+ // This context is a persistent object. The persistent needs to be recovered and reset.
755755 context : v8.Context ,
756756
757757 // Because calls can be nested (i.e.a function calling a callback),
@@ -800,6 +800,8 @@ pub fn Env(comptime S: type, comptime types: anytype) type {
800800 fn deinit (self : * Executor ) void {
801801 if (self .scope != null ) self .endScope ();
802802 self .context .exit ();
803+ var presistent_context = v8 .Persistent (v8 .Context ).recoverCast (self .context );
804+ presistent_context .deinit ();
803805
804806 self ._call_arena_instance .deinit ();
805807 self ._scope_arena_instance .deinit ();
0 commit comments