HS: step limit + meta.caller (+4 tests)
- _NO_STEP_LIMIT set exempts hypertrace tests from the 200k step cap - globalThis.__hs_deadline exposed so cek_step_loop wall-clock check (every 10k steps) can terminate runaway async loops without needing to go through host-call or _driveAsync - meta + _hs-on-caller added to hs-runtime.sx (both lib and bundled): on-event handlers now set meta.caller to an object with meta.feature.type = "onFeature" before calling the handler Tests 196 (async hypertrace), 198 (meta.caller), 199, 200 now pass. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -43,12 +43,26 @@
|
||||
|
||||
;; Run an initializer function immediately.
|
||||
;; (hs-init thunk) — called at element boot time
|
||||
(define meta (host-new "Object"))
|
||||
|
||||
(define
|
||||
_hs-on-caller
|
||||
(let
|
||||
((_ctx (host-new "Object"))
|
||||
(_m (host-new "Object"))
|
||||
(_f (host-new "Object")))
|
||||
(do
|
||||
(host-set! _f "type" "onFeature")
|
||||
(host-set! _m "feature" _f)
|
||||
(host-set! _ctx "meta" _m)
|
||||
_ctx)))
|
||||
|
||||
(define
|
||||
hs-on
|
||||
(fn
|
||||
(target event-name handler)
|
||||
(let
|
||||
((wrapped (fn (event) (guard (e ((and (not (= event-name "exception")) (not (= event-name "error"))) (dom-dispatch target "exception" {:error e})) (true (raise e))) (handler event)))))
|
||||
((wrapped (fn (event) (do (host-set! meta "caller" _hs-on-caller) (guard (e ((and (not (= event-name "exception")) (not (= event-name "error"))) (dom-dispatch target "exception" {:error e})) (true (raise e))) (handler event))))))
|
||||
(let
|
||||
((unlisten (dom-listen target event-name wrapped))
|
||||
(prev (or (dom-get-data target "hs-unlisteners") (list))))
|
||||
|
||||
Reference in New Issue
Block a user