From 99969035c5dc892774d7512e264704bc3c6b27f3 Mon Sep 17 00:00:00 2001 From: Baptiste Dupuch Date: Sat, 17 Sep 2022 10:30:20 +0200 Subject: [PATCH] Fixing meta bug on coll --- clj/src/cljd/compiler.cljc | 8 +++++++- clj/test/cljd/test_clojure/core_test_cljd.cljd | 11 +++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/clj/src/cljd/compiler.cljc b/clj/src/cljd/compiler.cljc index c1113dc3..d1dff73b 100644 --- a/clj/src/cljd/compiler.cljc +++ b/clj/src/cljd/compiler.cljc @@ -1483,7 +1483,12 @@ (defn emit-coll ([coll env] (emit-coll emit coll env)) ([maybe-quoted-emit coll env] - (if (seq coll) + (cond + (seq (meta coll)) + (with-lifted [data (maybe-quoted-emit (with-meta coll nil) env)] env + (with-lifted [metadata (maybe-quoted-emit (meta coll) env)] env + (list (emit 'cljd.core/with-meta env) data metadata))) + (seq coll) (let [items (into [] (if (map? coll) cat identity) coll) fn-sym (cond (map? coll) 'cljd.core/-map-lit @@ -1493,6 +1498,7 @@ :else (throw (ex-info (str "Can't emit collection " (pr-str coll)) {:form coll}))) ] (with-lifted [fixed-list (emit-dart-literal maybe-quoted-emit (with-meta (vec items) {:fixed true}) env)] env (list (emit fn-sym env) fixed-list))) + :empty-coll (emit (cond (map? coll) 'cljd.core/-EMPTY-MAP diff --git a/clj/test/cljd/test_clojure/core_test_cljd.cljd b/clj/test/cljd/test_clojure/core_test_cljd.cljd index 1ef75872..30b8b410 100644 --- a/clj/test/cljd/test_clojure/core_test_cljd.cljd +++ b/clj/test/cljd/test_clojure/core_test_cljd.cljd @@ -546,3 +546,14 @@ [:error])))) ;; (.fold (stream xform coll) [] (fn [acc item] (conj acc item))) + +(deftest meta-on-colls-not-generated-CLJD151 + (is (= (meta '^{x (inc 1)} [1]) '{x (inc 1)})) + (is (= ((fn [] (meta '^{x (inc 1)} [1]))) '{x (inc 1)})) + (is (= (meta ^{:a (inc 1)} [1]) {:a 2})) + (is (= ((fn [] (meta ^{:a (inc 1)} [1]))) {:a 2})) + + (is (= (meta '^{x (inc 1)} []) '{x (inc 1)})) + (is (= ((fn [] (meta '^{x (inc 1)} []))) '{x (inc 1)})) + (is (= (meta ^{:a (inc 1)} []) {:a 2})) + (is (= ((fn [] (meta ^{:a (inc 1)} []))) {:a 2})))