From 077263bae4c24c0e41d9435d37bef805ff1e44ee Mon Sep 17 00:00:00 2001 From: Karl Seguin Date: Wed, 8 Apr 2026 17:02:40 +0800 Subject: [PATCH] Simplifies NodeList.foreach Removes 2 layers of indirection (including 1 allocation) that is unnecessary for an internal call. --- src/browser/webapi/collections/NodeList.zig | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/src/browser/webapi/collections/NodeList.zig b/src/browser/webapi/collections/NodeList.zig index 3d298de2..cd905df7 100644 --- a/src/browser/webapi/collections/NodeList.zig +++ b/src/browser/webapi/collections/NodeList.zig @@ -92,20 +92,11 @@ pub fn entries(self: *NodeList, page: *Page) !*EntryIterator { pub fn forEach(self: *NodeList, cb: js.Function, page: *Page) !void { var i: i32 = 0; - - var it = try self.values(page); - - // the iterator takes a reference against our list - defer self.releaseRef(page._session); - while (true) : (i += 1) { - const next = try it.next(page); - if (next.done) { - return; - } + const node = try self.getAtIndex(@intCast(i), page) orelse return; var caught: js.TryCatch.Caught = undefined; - cb.tryCall(void, .{ next.value, i, self }, &caught) catch { + cb.tryCall(void, .{ node, i, self }, &caught) catch { log.debug(.js, "forEach callback", .{ .caught = caught, .source = "nodelist" }); return; };