Skip to content

Commit

Permalink
CLJS-1046: static vars do not respect user compile time metadata
Browse files Browse the repository at this point in the history
Move user meta data into :meta var field to separate from compiler
and analyzer metadata.

When emitting static vars emit the standard var meta plus the user
supplied meta

Add Ivan Mikushin's tests.
  • Loading branch information
swannodette committed Feb 20, 2015
1 parent 41f6aa9 commit cd97162
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 5 deletions.
1 change: 1 addition & 0 deletions Clojurescript.iml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
<sourceFolder url="file://$MODULE_DIR$/src/clj" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/cljs" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/test/clj" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/test/cljs" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/.cljs_nashorn_repl" />
<excludeFolder url="file://$MODULE_DIR$/.cljs_node_repl" />
<excludeFolder url="file://$MODULE_DIR$/.cljs_repl" />
Expand Down
16 changes: 11 additions & 5 deletions src/clj/cljs/analyzer.clj
Original file line number Diff line number Diff line change
Expand Up @@ -554,11 +554,16 @@
:var (analyze env sym)
:sym (analyze env `(quote ~(symbol (name (:ns var)) (name (:name var)))))
:meta (let [ks [:ns :doc :file :line :column]
m (assoc (zipmap ks (map #(list 'quote (get var %)) ks))
:name `(quote ~(symbol (name (:name var))))
:test `(when ~sym (.-cljs$lang$test ~sym))
:arglists (map with-meta (:arglists var) (:arglists-meta var)))]
(analyze env m))}))
m (merge
(assoc (zipmap ks (map #(list 'quote (get var %)) ks))
:name `(quote ~(symbol (name (:name var))))
:test `(when ~sym (.-cljs$lang$test ~sym))
:arglists (map with-meta (:arglists var) (:arglists-meta var)))
(let [user-meta (:meta var)
uks (keys user-meta)]
(zipmap uks
(map #(list 'quote (get user-meta %)) uks))))]
(analyze env m))}))

(defmethod parse 'if
[op env [_ test then else :as form] name _]
Expand Down Expand Up @@ -720,6 +725,7 @@
;; elide test metadata, as it includes non-valid EDN - David
(cond-> sym-meta
:test (-> (dissoc :test) (assoc :test true)))
{:meta (dissoc sym-meta :test)}
(when doc {:doc doc})
(when dynamic {:dynamic true})
(source-info var-name env)
Expand Down
13 changes: 13 additions & 0 deletions test/cljs/cljs/core_test.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -2681,6 +2681,19 @@
(catch js/Error e
*print-level*)))))

(defn meta-test-fn
"A docstring"
{:foo :bar, :baz 12345, :whatever "String Metadata"}
[a b]
(+ a b))

(deftest test-cljs-1046
(let [m (meta #'meta-test-fn)]
(is (= "A docstring" (:doc m)))
(is (= :bar (:foo m)))
(is (= 12345 (:baz m)))
(is (= "String Metadata" (:whatever m)))))

(comment
;; ObjMap
;; (let [ks (map (partial str "foo") (range 500))
Expand Down

0 comments on commit cd97162

Please sign in to comment.