Skip to content

Commit 234cd05

Browse files
committed
Preserve :tag metadata in copy-var
copy-var, copy-var*, and var-meta now propagate :tag metadata from the original JVM var to the SCI var.
1 parent b97b894 commit 234cd05

File tree

3 files changed

+14
-7
lines changed

3 files changed

+14
-7
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ SCI is used in [babashka](https://github.com/babashka/babashka),
1818
- Fix `ns-map` not reflecting vars that shadow referred vars (e.g. `(defn inc ...)`)
1919
- `deftype` now macroexpands to `deftype*`, matching JVM Clojure, enabling code walkers like riddley
2020
- `case` now macroexpands to JVM-compatible `case*` format, enabling tools like riddley and cloverage to work with SCI
21+
- Preserve `:tag` metadata in `copy-var`
2122
- Fix `.method` on class objects (e.g. `(.getDeclaredField String "value")`) routing to static instead of instance method path
2223
- `macroexpand-1` of `(.method ClassName)` now wraps class targets in `identity`, matching Clojure behavior
2324
- `macroexpand-1` now accepts an optional env map as first argument, like `cljs.analyzer/macroexpand-1`

src/sci/core.cljc

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -75,10 +75,12 @@
7575
val# (deref var#)
7676
m# (-> var# meta)
7777
name# (or ~nm (:name m#))
78-
new-m# {:doc (:doc m#)
79-
:name name#
80-
:arglists (:arglists m#)
81-
:ns ns#}]
78+
tag# (:tag m#)
79+
new-m# (cond-> {:doc (:doc m#)
80+
:name name#
81+
:arglists (:arglists m#)
82+
:ns ns#}
83+
tag# (assoc :tag tag#))]
8284
(cond (:dynamic m#)
8385
(new-dynamic-var name# val# new-m#)
8486
(or (:macro m#) (:sci/macro m#))
@@ -94,12 +96,14 @@
9496
arglists (:arglists m)
9597
dynamic (:dynamic m)
9698
macro (:macro m)
97-
new-m (cond-> {:ns sci-ns
99+
tag (:tag m)
100+
new-m (cond-> {:ns sci-ns
98101
:name nm}
99102
macro (assoc :macro true)
100103
doc (assoc :doc doc)
101104
arglists (assoc :arglists arglists)
102-
dynamic (assoc :dynamic dynamic))]
105+
dynamic (assoc :dynamic dynamic)
106+
tag (assoc :tag tag))]
103107
(new-var nm @clojure-var new-m)))
104108

105109
(macros/deftime

src/sci/impl/copy_vars.cljc

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,11 +55,13 @@
5555
:cljs (atom nil))])]
5656
(macros/? :clj #?(:clj (let [m (meta the-var)
5757
dyn (:dynamic m)
58-
arglists (:arglists m)]
58+
arglists (:arglists m)
59+
tag (:tag m)]
5960
(cond-> (if elide-vars {} {:doc (:doc m)})
6061
dyn (assoc :dynamic dyn)
6162
(if elide-vars false arglists)
6263
(assoc :arglists (list 'quote (:arglists m)))
64+
tag (assoc :tag tag)
6365
fast-path (assoc :sci.impl/fast-path (list 'quote sym))))
6466
:cljs nil)
6567
:cljs (let [r (cljs-resolve &env fqsym)

0 commit comments

Comments
 (0)