|
15 | 15 |
|
16 | 16 | (def read-eval
|
17 | 17 | (utils/new-var '*read-eval* false {:ns utils/clojure-core-ns
|
18 |
| - :dynamic true})) |
| 18 | + :dynamic true})) |
19 | 19 |
|
20 | 20 | (def data-readers
|
21 | 21 | (utils/new-var '*data-readers* {}
|
22 |
| - {:ns utils/clojure-core-ns |
23 |
| - :dynamic true})) |
| 22 | + {:ns utils/clojure-core-ns |
| 23 | + :dynamic true})) |
24 | 24 |
|
25 | 25 | (def default-data-reader-fn
|
26 | 26 | (utils/new-var '*default-data-reader-fn* nil
|
27 |
| - {:ns utils/clojure-core-ns |
28 |
| - :dynamic true})) |
| 27 | + {:ns utils/clojure-core-ns |
| 28 | + :dynamic true})) |
29 | 29 |
|
30 | 30 | (def reader-resolver
|
31 | 31 | (utils/new-var '*reader-resolver* nil
|
32 |
| - {:ns utils/clojure-core-ns |
33 |
| - :dynamic true})) |
| 32 | + {:ns utils/clojure-core-ns |
| 33 | + :dynamic true})) |
34 | 34 |
|
35 | 35 | (def default-opts
|
36 | 36 | (edamame/normalize-opts
|
|
56 | 56 | (let [env @(:env ctx)
|
57 | 57 | sym-ns (when-let [n (namespace sym)]
|
58 | 58 | (symbol n))
|
59 |
| - sym-name-str (name sym) |
60 | 59 | current-ns (utils/current-ns-name)
|
61 | 60 | current-ns-str (str current-ns)
|
62 | 61 | namespaces (get env :namespaces)
|
63 | 62 | the-current-ns (get namespaces current-ns)
|
64 | 63 | aliases (:aliases the-current-ns)
|
| 64 | + res-without-sym |
| 65 | + (fn res-without-sym [sym] |
| 66 | + (let [sym-name-str (name sym)] |
| 67 | + (or (when-let [refers (:refers the-current-ns)] |
| 68 | + (when-let [v (get refers sym)] |
| 69 | + (var->sym v))) |
| 70 | + (when-let [v (get the-current-ns sym)] |
| 71 | + (var->sym v)) |
| 72 | + (when (or (and (contains? (get namespaces 'clojure.core) sym) |
| 73 | + ;; only valid when the symbol isn't excluded |
| 74 | + (not (some-> the-current-ns |
| 75 | + :refer |
| 76 | + (get 'clojure.core) |
| 77 | + :exclude |
| 78 | + (contains? sym )))) |
| 79 | + (contains? utils/ana-macros sym)) |
| 80 | + (symbol "clojure.core" sym-name-str)) |
| 81 | + (interop/fully-qualify-class ctx sym) |
| 82 | + ;; all unresolvable symbols all resolved in the current namespace |
| 83 | + (if (str/includes? sym-name-str ".") |
| 84 | + ;; NOTE: this should probably be moved to edamame at some |
| 85 | + ;; point, but it's at a pristine 1.0.0 status right now ;) |
| 86 | + (if (str/ends-with? sym-name-str ".") |
| 87 | + (symbol (str (res-without-sym (symbol (subs sym-name-str 0 (dec (count sym-name-str))))) ".")) |
| 88 | + ;; unresolved class |
| 89 | + sym) |
| 90 | + (symbol current-ns-str sym-name-str))))) |
65 | 91 | ret (if-not sym-ns
|
66 |
| - (or (when-let [refers (:refers the-current-ns)] |
67 |
| - (when-let [v (get refers sym)] |
68 |
| - (var->sym v))) |
69 |
| - (when-let [v (get the-current-ns sym)] |
70 |
| - (var->sym v)) |
71 |
| - (when (or (and (contains? (get namespaces 'clojure.core) sym) |
72 |
| - ;; only valid when the symbol isn't excluded |
73 |
| - (not (some-> the-current-ns |
74 |
| - :refer |
75 |
| - (get 'clojure.core) |
76 |
| - :exclude |
77 |
| - (contains? sym )))) |
78 |
| - (contains? utils/ana-macros sym)) |
79 |
| - (symbol "clojure.core" sym-name-str)) |
80 |
| - (interop/fully-qualify-class ctx sym) |
81 |
| - ;; all unresolvable symbols all resolved in the current namespace |
82 |
| - (if (str/includes? sym-name-str ".") |
83 |
| - sym ;; unresolved class |
84 |
| - (symbol current-ns-str sym-name-str))) |
| 92 | + (res-without-sym sym) |
85 | 93 | (if (get-in env [:namespaces sym-ns])
|
86 | 94 | sym
|
87 | 95 | (if-let [ns (get aliases sym-ns)]
|
88 |
| - (symbol (str ns) sym-name-str) |
| 96 | + (symbol (str ns) (name sym)) |
89 | 97 | sym)))]
|
90 | 98 | ret))
|
91 | 99 |
|
|
0 commit comments