Skip to content

Commit 911e85f

Browse files
committed
Preserve :file
1 parent 407aa71 commit 911e85f

File tree

4 files changed

+28
-8
lines changed

4 files changed

+28
-8
lines changed

src/sci/core.cljc

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,12 +83,16 @@
8383
name# (or ~nm (:name m#))
8484
tag# (:tag m#)
8585
private# (:private m#)
86+
file# (:file m#)
87+
line# (:line m#)
8688
new-m# (cond-> {:doc (:doc m#)
8789
:name name#
8890
:arglists (:arglists m#)
8991
:ns ns#}
9092
tag# (assoc :tag tag#)
91-
private# (assoc :private private#))]
93+
private# (assoc :private private#)
94+
file# (assoc :file file#)
95+
line# (assoc :line line#))]
9296
(cond (:dynamic m#)
9397
(new-dynamic-var name# val# new-m#)
9498
(or (:macro m#) (:sci/macro m#))
@@ -106,14 +110,18 @@
106110
macro (:macro m)
107111
private (:private m)
108112
tag (:tag m)
113+
file (:file m)
114+
line (:line m)
109115
new-m (cond-> {:ns sci-ns
110116
:name nm}
111117
macro (assoc :macro true)
112118
doc (assoc :doc doc)
113119
arglists (assoc :arglists arglists)
114120
dynamic (assoc :dynamic dynamic)
115121
private (assoc :private private)
116-
tag (assoc :tag tag))]
122+
tag (assoc :tag tag)
123+
file (assoc :file file)
124+
line (assoc :line line))]
117125
(new-var nm @clojure-var new-m)))
118126

119127
(macros/deftime
@@ -418,7 +426,9 @@
418426
:macro
419427
:sci/macro
420428
:doc
421-
:dynamic])
429+
:dynamic
430+
:file
431+
:line])
422432
normalize-meta)))
423433

424434
(macros/deftime

src/sci/impl/copy_vars.cljc

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,14 +57,18 @@
5757
dyn (:dynamic m)
5858
private (:private m)
5959
arglists (:arglists m)
60-
tag (:tag m)]
60+
tag (:tag m)
61+
file (:file m)
62+
line (:line m)]
6163
(cond-> (if elide-vars {} {:doc (:doc m)})
6264
dyn (assoc :dynamic dyn)
6365
private (assoc :private private)
6466
(if elide-vars false arglists)
6567
(assoc :arglists (list 'quote (:arglists m)))
6668
tag (assoc :tag tag)
67-
fast-path (assoc :sci.impl/fast-path (list 'quote sym))))
69+
fast-path (assoc :sci.impl/fast-path (list 'quote sym))
70+
(if elide-vars false file) (assoc :file file)
71+
(if elide-vars false line) (assoc :line line)))
6872
:cljs nil)
6973
:cljs (let [r (cljs-resolve &env fqsym)
7074
m (:meta r)

src/sci/impl/namespaces.cljc

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1219,6 +1219,7 @@
12191219
(macros/usetime
12201220

12211221
(def clojure-core
1222+
(merge
12221223
(avoid-method-too-large
12231224
{:obj clojure-core-ns
12241225
'*ns* sci.impl.utils/current-ns
@@ -1569,8 +1570,9 @@
15691570
#?@(:cljs ['js-keys (copy-core-var js-keys)])
15701571
#?@(:cljs ['js-delete (copy-core-var js-delete)])
15711572
#?@(:cljs ['js-in (copy-var js-in clojure-core-ns {:copy-meta-from clojure.core/js-in})])
1572-
'juxt (copy-core-var juxt)
1573-
'keep (copy-core-var keep)
1573+
'juxt (copy-core-var juxt)})
1574+
(avoid-method-too-large
1575+
{'keep (copy-core-var keep)
15741576
'keep-indexed (copy-core-var keep-indexed)
15751577
'key (copy-core-var key)
15761578
'keys (copy-core-var keys)
@@ -1862,7 +1864,7 @@
18621864
'ratio? (copy-core-var ratio?)
18631865
'rationalize (copy-core-var rationalize)
18641866
'seque (copy-core-var seque)
1865-
'xml-seq (copy-core-var xml-seq)])}))
1867+
'xml-seq (copy-core-var xml-seq)])})))
18661868

18671869
(defn dir-fn
18681870
[ns]

test/sci/core_test.cljc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -296,6 +296,10 @@
296296
(testing "metadata isn't evaluated on defn expression"
297297
(eval* "^{:inverse-of foo} (defn bar [])")))
298298

299+
(deftest source-fn-test
300+
(testing "source-fn on built-in var does not throw"
301+
(is (nil? (eval* "(clojure.repl/source-fn 'inc)")))))
302+
299303
(deftest defn-kwargs-test
300304
(is (= {:a 1} (sci/eval-string "(defn foo [& {:keys [a]}] {:a a}) (foo :a 1)")))
301305
(is (= {:a 1} (sci/eval-string "(defn foo [& {:keys [a]}] {:a a}) (foo {:a 1})"))))

0 commit comments

Comments
 (0)