page handlescope clarification

This commit is contained in:
sjorsdonkers
2025-04-30 12:01:56 +02:00
parent 7dde0be043
commit 83ef21e699

View File

@@ -345,8 +345,7 @@ pub fn Env(comptime S: type, comptime types: anytype) type {
const isolate = env.isolate; const isolate = env.isolate;
const Global = @TypeOf(global.*); const Global = @TypeOf(global.*);
var context: v8.Context = undefined; var context: v8.Context = blk: {
{
var handle_scope: v8.HandleScope = undefined; var handle_scope: v8.HandleScope = undefined;
v8.HandleScope.init(&handle_scope, isolate); v8.HandleScope.init(&handle_scope, isolate);
defer handle_scope.deinit(); defer handle_scope.deinit();
@@ -379,7 +378,7 @@ pub fn Env(comptime S: type, comptime types: anytype) type {
} }
const context_local = v8.Context.init(isolate, global_template, null); const context_local = v8.Context.init(isolate, global_template, null);
context = v8.Persistent(v8.Context).init(isolate, context_local).castToContext(); const context = v8.Persistent(v8.Context).init(isolate, context_local).castToContext();
context.enter(); context.enter();
errdefer if (enter) context.exit(); errdefer if (enter) context.exit();
defer if (!enter) context.exit(); defer if (!enter) context.exit();
@@ -404,8 +403,12 @@ pub fn Env(comptime S: type, comptime types: anytype) type {
_ = self_obj.setPrototype(context, proto_obj); _ = self_obj.setPrototype(context, proto_obj);
} }
} }
} break :blk context;
};
// For a Page we only create one HandleScope, it is stored in the main World (enter==true). A page can have multple contexts, 1 for each World.
// The main Context/Scope that enters and holds the HandleScope should therefore always be created first. Following other worlds for this page
// like isolated Worlds, will thereby place their objects on the main page's HandleScope. Note: In the furure the number of context will multiply multiple frames support
var handle_scope: ?v8.HandleScope = null; var handle_scope: ?v8.HandleScope = null;
if (enter) { if (enter) {
handle_scope = @as(v8.HandleScope, undefined); handle_scope = @as(v8.HandleScope, undefined);