Commit c63701c 1 parent 22c3356 commit c63701c Copy full SHA for c63701c
File tree 1 file changed +13
-6
lines changed
1 file changed +13
-6
lines changed Original file line number Diff line number Diff line change 40
40
(or (resolve sym)
41
41
(throw (IllegalArgumentException. (format " Cannot resolve %s" sym)))))
42
42
43
+ (defn- handler-future
44
+ [sym ns fn-name]
45
+ (or (get @delayed-handlers sym)
46
+ (get (swap! delayed-handlers assoc sym
47
+ (delay
48
+ (locking require-lock
49
+ (require ns )
50
+ (resolve-or-fail fn-name))))
51
+ sym)))
52
+
43
53
(defmacro run-deferred-handler
44
54
" Make a delay out of `fn-name` and place it in `delayed-handlers` atom at compile time.
45
55
Require and invoke the delay at run-time with arguments `handler` and
46
56
`msg`. `fn-name` must be a namespaced symbol (unquoted)."
47
57
[fn-name handler msg]
48
58
(let [ns (symbol (namespace `~fn-name))
49
59
sym (symbol (name `~fn-name))]
50
- (swap! delayed-handlers assoc sym
51
- (delay
52
- (locking require-lock
53
- (require `~ns)
54
- (resolve-or-fail `~fn-name))))
55
- `(@(get @delayed-handlers '~sym) ~handler ~msg)))
60
+ `(@(handler-future '~sym '~ns '~fn-name)
61
+ ~handler ~msg)))
62
+
56
63
57
64
(defmacro ^{:arglists '([name handler-fn descriptor]
58
65
[name handler-fn trigger-it descriptor])}
You can’t perform that action at this time.
0 commit comments