Skip to content

Commit b902438

Browse files
author
dnolen
committed
CLJS-1214: :arglists meta has needless quoting
CLJS-1232: bad arglists for doc, regression more robust handling of quoted arglists. in all cases check whether :arglists has already been quoted to prevent quoting multiple times. in the doc string case, don't blindly use `second` check that we have something quoted.
1 parent 4120781 commit b902438

File tree

4 files changed

+26
-10
lines changed

4 files changed

+26
-10
lines changed

src/clj/cljs/analyzer.clj

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -695,14 +695,20 @@
695695
:sym (analyze expr-env `(quote ~(symbol (name (:ns var)) (name (:name var)))))
696696
:meta (let [ks [:ns :doc :file :line :column]
697697
m (merge
698-
(assoc (zipmap ks (map #(list 'quote (get var %)) ks))
699-
:name `(quote ~(symbol (name (:name var))))
700-
:test `(when ~sym (.-cljs$lang$test ~sym))
701-
:arglists (map with-meta (:arglists var) (:arglists-meta var)))
702698
(let [user-meta (:meta var)
703699
uks (keys user-meta)]
704700
(zipmap uks
705-
(map #(list 'quote (get user-meta %)) uks))))]
701+
(map #(list 'quote (get user-meta %)) uks)))
702+
(assoc (zipmap ks (map #(list 'quote (get var %)) ks))
703+
:name `(quote ~(symbol (name (:name var))))
704+
:test `(when ~sym (.-cljs$lang$test ~sym))
705+
:arglists (let [arglists (:arglists var)
706+
arglists' (if (= 'quote (first arglists))
707+
(second arglists)
708+
arglists)]
709+
(list 'quote
710+
(doall (map with-meta arglists'
711+
(:arglists-meta var)))))))]
706712
(analyze expr-env m))}))
707713

708714
(defmethod parse 'if

src/clj/cljs/core.clj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2107,7 +2107,7 @@
21072107
{:variadic true
21082108
:max-fixed-arity c-1
21092109
:method-params [sig]
2110-
:arglists [arglist]
2110+
:arglists (core/list arglist)
21112111
:arglists-meta (doall (map meta [arglist]))})]
21122112
`(do
21132113
(def ~(with-meta name meta)

src/cljs/cljs/repl.cljs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,14 @@
1717
(cond
1818
(:forms m) (doseq [f (:forms m)]
1919
(println " " f))
20-
(:arglists m) (if (or (:macro m)
21-
(:repl-special-function m))
22-
(prn (:arglists m))
23-
(prn (second (:arglists m)))))
20+
(:arglists m) (let [arglists (:arglists m)]
21+
(if (or (:macro m)
22+
(:repl-special-function m))
23+
(prn arglists)
24+
(prn
25+
(if (= 'quote (first arglists))
26+
(second arglists)
27+
arglists)))))
2428
(if (:special-form m)
2529
(do
2630
(println "Special Form")

test/cljs/cljs/core_test.cljs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2783,6 +2783,12 @@
27832783
(is (= (set {:a 0 :b 0 :c 0 :d 0 :e 0 :f 0 :g 0 :h 0 :i 0})
27842784
#{[:a 0] [:b 0] [:c 0] [:d 0] [:e 0] [:f 0] [:g 0] [:h 0] [:i 0]})))
27852785

2786+
(deftest test-var-aarglists
2787+
(is (= (-> #'first meta :arglists) '([coll])))
2788+
(is (= (-> #'hash-map meta :arglists) '([& keyvals])))
2789+
(is (= (-> #'map meta :arglists)
2790+
'([f] [f coll] [f c1 c2] [f c1 c2 c3] [f c1 c2 c3 & colls]))))
2791+
27862792
(comment
27872793
;; ObjMap
27882794
;; (let [ks (map (partial str "foo") (range 500))

0 commit comments

Comments
 (0)