From 056b8bb53660883280c86439b90f93a7fb47df17 Mon Sep 17 00:00:00 2001 From: egrs Date: Wed, 11 Mar 2026 07:58:31 +0100 Subject: [PATCH] fix CI: store list pointer on AbstractRange to avoid Page type mismatch The bridge.finalizer resolves Page through its own module graph, which can differ from Range.zig's import in release builds. Store a pointer to the live_ranges list directly on AbstractRange so deinit can remove without accessing Page fields. --- src/browser/Factory.zig | 1 + src/browser/webapi/AbstractRange.zig | 1 + src/browser/webapi/Range.zig | 4 ++-- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/browser/Factory.zig b/src/browser/Factory.zig index b0da7a81..dbdc11ae 100644 --- a/src/browser/Factory.zig +++ b/src/browser/Factory.zig @@ -282,6 +282,7 @@ pub fn abstractRange(self: *Factory, child: anytype, page: *Page) !*@TypeOf(chil ._start_container = doc, }; chain.setLeaf(1, child); + abstract_range._live_ranges = &page._live_ranges; page._live_ranges.append(&abstract_range._range_link); return chain.get(1); } diff --git a/src/browser/webapi/AbstractRange.zig b/src/browser/webapi/AbstractRange.zig index e766ac29..93bda1fa 100644 --- a/src/browser/webapi/AbstractRange.zig +++ b/src/browser/webapi/AbstractRange.zig @@ -35,6 +35,7 @@ _start_container: *Node, // Intrusive linked list node for tracking live ranges on the Page. _range_link: std.DoublyLinkedList.Node = .{}, +_live_ranges: *std.DoublyLinkedList = undefined, pub const Type = union(enum) { range: *Range, diff --git a/src/browser/webapi/Range.zig b/src/browser/webapi/Range.zig index e3b8bc41..213dea2a 100644 --- a/src/browser/webapi/Range.zig +++ b/src/browser/webapi/Range.zig @@ -680,8 +680,8 @@ fn getContainerElement(self: *const Range) ?*Node.Element { return parent.is(Node.Element); } -pub fn deinit(self: *Range, _: bool, page: *Page) void { - page._live_ranges.remove(&self._proto._range_link); +pub fn deinit(self: *Range, _: bool, _: *Page) void { + self._proto._live_ranges.remove(&self._proto._range_link); } pub const JsApi = struct {