[new] Simplify signal expansion

This commit is contained in:
Peter Taoussanis 2024-08-26 11:19:45 +02:00
parent bbfe61106c
commit 3068ccf8d7

View file

@ -550,7 +550,12 @@
:sf-arity 4 :sf-arity 4
:ct-sig-filter ct-sig-filter :ct-sig-filter ct-sig-filter
:*rt-sig-filter* `*rt-sig-filter*} :*rt-sig-filter* `*rt-sig-filter*}
opts)]
(assoc opts :bound-forms
{:kind '__kind
:ns '__ns
:id '__id
:level '__level}))]
(if elide? (if elide?
run-form run-form
@ -716,33 +721,35 @@
;; (run-fn-form) ;; (run-fn-form)
;; (let [...])))) ;; (let [...]))))
`(enc/if-not ~allow? ; Allow to throw at call ;; Unless otherwise specified, allow errors to throw on call
~run-form `(let [~'__kind ~kind-form
(let [;;; Allow to throw at call ~'__ns ~ns-form
~'__inst ~inst-form ~'__id ~id-form
~'__level ~level-form ~'__level ~level-form]
~'__kind ~kind-form
~'__id ~id-form
~'__ns ~ns-form
~'__thread ~thread-form
~'__root0 ~root-form0 ; ?{:keys [id uid]}
~@into-let-form ; Inject conditional bindings (enc/if-not ~allow?
signal# ~signal-delay-form] ~run-form
(let [~'__inst ~inst-form
~'__thread ~thread-form
~'__root0 ~root-form0 ; ?{:keys [id uid]}
(dispatch-signal! ~@into-let-form ; Inject conditional bindings
;; Unconditionally send same wrapped signal to all handlers. signal# ~signal-delay-form]
;; Each handler will use wrapper for handler filtering,
;; unwrapping (realizing) only allowed signals.
(WrappedSignal. ~'__ns ~'__kind ~'__id ~'__level signal#))
(if ~'__run-result (dispatch-signal!
( ~'__run-result signal#) ;; Unconditionally send same wrapped signal to all handlers.
true)))))))) ;; Each handler will use wrapper for handler filtering,
;; unwrapping (realizing) only allowed signals.
(WrappedSignal. ~'__ns ~'__kind ~'__id ~'__level signal#))
(if ~'__run-result
( ~'__run-result signal#)
true)))))))))
(comment (comment
(with-signal (signal! {:level :warn :let [x :x] :msg ["Test" "message" x] :data {:a :A :x x} :run (+ 1 2)})) (with-signal (signal! {:level :warn :let [x :x] :msg ["Test" "message" x] :data {:a :A :x x} :run (+ 1 2)}))
(macroexpand '(signal! {:level :warn :let [x :x] :msg ["Test" "message" x] :data {:a :A :x x} :run (+ 1 2)})) (macroexpand '(signal! {:level :warn :let [x :x] :msg ["Test" "message" x] :data {:a :A :x x} :run (+ 1 2)}))
(macroexpand '(signal! {:level :info}))
(do (do
(println "---") (println "---")