41
41
(cond ('#{clojure.core/unquote-splicing} t) (evaling s)
42
42
('#{clojure.core/unquote} t) [(evaling s)]
43
43
:else [(doall (mapcat unroll expr))]))]
44
- (binding [*template-vars* (eval `(let [~@bindings] ~(do ( into {} (for [s (flatten (take-nth 2 bindings))] [(list 'quote s) s]) ))))]
44
+ (binding [*template-vars* (eval `(let [~@bindings] ~(into {} (for [s (flatten (take-nth 2 bindings))] [(list 'quote s) s]))))]
45
45
(first (unroll expr)))))
46
46
47
47
; ; Works like an inlined defmacro call: The expression in (template) calls will be the result of the macro expansion.
118
118
:else exp))
119
119
120
120
(defn- macroexpand-code [&env exp]
121
- (let [e (macroexpand-1-code &env exp)] (if (identical? e exp) exp (recur &env e))))
121
+ (let [e (macroexpand-1-code &env exp)]
122
+ (if (identical? e exp)
123
+ exp
124
+ (recur &env e))))
122
125
123
126
; ; return seq of (fn-name ([args*] bodies*)+)
124
127
(defn- parsed-fn [[_ & bodies]]
627
630
; ; (defmethod enhance-code 'case* [sym->iden [_ value shift mask default-value imap switch-type mode skip-check]])
628
631
629
632
(defmethod enhance-code clojure.lang.Symbol [sym->iden s]
630
- (if-let [iden (get sym->iden s)]
633
+ (if-let [iden (sym->iden s)]
631
634
(with-meta s {::symbol-identity iden, ::symbol-used #{iden}})
632
635
s))
633
636
671
674
::symbol-loop (when (= form 'loop*) (mapv sym->iden (take-nth 2 bindings)))}))))
672
675
673
676
(defmethod enhance-code 'def [sym->iden [_ var-sym & tail]]
674
- (let [var-sym (vary-meta var-sym (partial reduce-kv (fn [m k v] (assoc m (enhance-code sym->iden k) (enhance-code sym->iden v))) {}))
675
- tail (map (partial enhance-code sym->iden) tail)
676
- all-metas (cons ( meta (last tail)) ( map meta (mapcat seq (meta var-sym))))]
677
+ (let [var-sym (vary-meta var-sym (partial reduce-kv (fn [m k v] (assoc m (enhance-code sym->iden k) (enhance-code sym->iden v))) {}))
678
+ tail (map (partial enhance-code sym->iden) tail)
679
+ all-metas (map meta (cons ( last tail) (mapcat seq (meta var-sym))))]
677
680
(with-meta (list* 'def var-sym tail)
678
681
{::symbol-used (set (mapcat ::symbol-used all-metas))
679
682
::symbol-introduced (set (mapcat ::symbol-introduced all-metas))})))
693
696
{::symbol-used (set (remove new-acc-1 (mapcat (comp ::symbol-used meta) bodies)))
694
697
::fn-sym-own (new-acc fname)
695
698
::fn-sym-introduced (-> symbol-loop ; ; arguments + let vars
696
- ; (cond-> fname (conj (new-acc fname)))
697
699
(into (set (mapcat (comp ::symbol-introduced meta) bodies))))
698
700
::symbol-loop symbol-loop
699
701
#_(set (keys new-acc-1))}))]
705
707
(let [bodies (remove (fn [x] (and (seq? x) ('#{finally catch } (first x)))) xs)
706
708
catches (filter (fn [x] (and (seq? x) (= 'catch (first x)))) xs)
707
709
finally (some (fn [x] (when (and (seq? x) (= 'finally (first x))) x)) xs)
708
- ,,,,,
709
710
catch-identity (gensym )
710
711
bodies (for [body bodies] (enhance-code sym->iden body))
711
712
catches (for [[c t e & tail] catches
712
713
:let [sym->iden (assoc sym->iden e catch-identity)]]
713
714
(list* c t (with-meta e {::symbol-identity catch-identity})
714
- (for [body tail] ( enhance-code sym->iden body) )))
715
+ (map ( partial enhance-code sym->iden) tail )))
715
716
catch-metas (for [[c t e & tail] catches, x tail] (meta x))
716
717
finally-bodies (seq (for [body (next finally )] (enhance-code sym->iden body)))]
717
718
(with-meta
791
792
(var-set-reset! #'*2 *1)
792
793
(var-set-reset! #'*1 e)
793
794
(println e))
794
- (catch Throwable t
795
+ (catch Throwable t
795
796
(.printStackTrace t)
796
797
(var-set-reset! #'*e t)))
797
798
(recur ))))
798
799
(println " EOF, bye!" ))))
799
800
800
- :OK
801
+ :OK
0 commit comments