fix(events): a listener's return ends that listener, not the dispatch

Listeners are compiled into one @ev_<E> function and return branched to its exit, so every
listener declared after one that returned early - and every foreign listener - never heard
the event. The per-kind listener shape (return unless it is my kind) answered only the
first-declared kind. examples/events/answer.ludic holds it; seed regenerated.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Orkun ÇAKILKAYA 2026-09-23 17:42:18 +03:00
parent 45e14dbb99
commit f5ab5cf88a
8 changed files with 11240 additions and 11128 deletions

View file

@ -121,7 +121,7 @@ function emit_return(st: Node) -> void {
let v = emit_expr(st.a)
store_at(llty(ret_ty), coerce_code(v, ret_ty), "%retval")
}
emit(" br label %ret\n")
emit(` br label %{g_ret_label}\n`)
g_term = true
}