From 97d53b81a7a67400485065f7cd8ef1489cb3d861 Mon Sep 17 00:00:00 2001 From: Karl Seguin Date: Wed, 11 Feb 2026 12:50:59 +0800 Subject: [PATCH] Give EventManager.dispatch and explicit error set This allows potentially recursive callers to use an implicit error set return. --- src/browser/EventManager.zig | 13 ++++++++++++- src/browser/webapi/element/html/Input.zig | 2 +- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/browser/EventManager.zig b/src/browser/EventManager.zig index 2d866733..fa0cad4c 100644 --- a/src/browser/EventManager.zig +++ b/src/browser/EventManager.zig @@ -157,7 +157,18 @@ pub fn remove(self: *EventManager, target: *EventTarget, typ: []const u8, callba } } -pub fn dispatch(self: *EventManager, target: *EventTarget, event: *Event) !void { +// Dispatching can be recursive from the compiler's point of view, so we need to +// give it an explicit error set so that other parts of the code can use and +// inferred error. +const DispatchError = error{ + OutOfMemory, + StringTooLarge, + JSExecCallback, + CompilationError, + ExecutionError, + JsException, +}; +pub fn dispatch(self: *EventManager, target: *EventTarget, event: *Event) DispatchError!void { if (comptime IS_DEBUG) { log.debug(.event, "eventManager.dispatch", .{ .type = event._type_string.str(), .bubbles = event._bubbles }); } diff --git a/src/browser/webapi/element/html/Input.zig b/src/browser/webapi/element/html/Input.zig index 8512d53c..eafd44d9 100644 --- a/src/browser/webapi/element/html/Input.zig +++ b/src/browser/webapi/element/html/Input.zig @@ -98,7 +98,7 @@ pub fn setOnSelectionChange(self: *Input, listener: ?js.Function) !void { } } -fn dispatchSelectionChangeEvent(self: *Input, page: *Page) anyerror!void { +fn dispatchSelectionChangeEvent(self: *Input, page: *Page) !void { const event = try Event.init("selectionchange", .{ .bubbles = true }, page); defer if (!event._v8_handoff) event.deinit(false); try page._event_manager.dispatch(self.asElement().asEventTarget(), event);