1919 ; ; (contains? #{'for} op) (analyze ctx expr)
2020 (= 'clojure.core/defrecord op) expr
2121 :else
22- (let [f (try (resolve/resolve-symbol ctx op true )
23- (catch #?(:clj Exception :cljs :default )
24- _ ::unresolved ))]
25- (if (kw-identical? ::unresolved f)
26- expr
27- (let [var? (var? f)
28- macro-var? (and var?
29- (vars/isMacro f))
30- f (if macro-var? @f f)]
31- (if (or macro-var? (macro? f))
32- (apply f original-expr (:bindings ctx) (rest expr))
33- (if (str/starts-with? (str op) " ." )
34- (let [target (second expr)
35- target (if (and (symbol? target)
36- (interop/resolve-class ctx target))
37- (list 'clojure.core/identity target)
38- target)]
39- (list* '. target (symbol (subs (str op) 1 )) (nnext expr)))
40- expr))))))
22+ (let [sname (str op)]
23+ (if (and (str/ends-with? sname " ." )
24+ (not (str/starts-with? sname " ." )))
25+ ; ; ClassName. constructor sugar -> (new ClassName args...)
26+ (list* 'new (symbol (subs sname 0 (dec (count sname)))) (rest expr))
27+ (let [f (try (resolve/resolve-symbol ctx op true )
28+ (catch #?(:clj Exception :cljs :default )
29+ _ ::unresolved ))]
30+ (if (kw-identical? ::unresolved f)
31+ expr
32+ (let [var? (var? f)
33+ macro-var? (and var?
34+ (vars/isMacro f))
35+ f (if macro-var? @f f)]
36+ (if (or macro-var? (macro? f))
37+ (apply f original-expr (:bindings ctx) (rest expr))
38+ (if (str/starts-with? sname " ." )
39+ (let [target (second expr)
40+ target (if (and (symbol? target)
41+ (interop/resolve-class ctx target))
42+ (list 'clojure.core/identity target)
43+ target)]
44+ (list* '. target (symbol (subs sname 1 )) (nnext expr)))
45+ expr))))))))
4146 expr))
4247 expr))))
4348
4651 (let [ex (macroexpand-1 ctx form)]
4752 (if (identical? ex form)
4853 form
49- (macroexpand ctx ex))))
54+ (macroexpand ctx ex))))
0 commit comments