Skip to content

Commit d3beffe

Browse files
committed
:lite-mode path for maps
1 parent 90945e6 commit d3beffe

File tree

1 file changed

+28
-2
lines changed

1 file changed

+28
-2
lines changed

src/main/clojure/cljs/compiler.cljc

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -525,6 +525,27 @@
525525
(defn lite-mode? []
526526
(get-in @env/*compiler* [:options :lite-mode]))
527527

528+
(defn obj-map-key [x]
529+
(if (keyword? x)
530+
(str \" "\\uFDD0" \'
531+
(if (namespace x)
532+
(str (namespace x) "/") "")
533+
(name x)
534+
\")
535+
x))
536+
537+
(defn emit-obj-map [str-keys vals comma-sep distinct-keys?]
538+
(if (zero? (count str-keys))
539+
(emits "cljs.core.ObjMap.EMPTY")
540+
(emits "cljs.core.ObjMap.fromObject([" (comma-sep str-keys) "], {"
541+
(comma-sep (map (fn [k v] (str k ":" (emit-str v))) str-keys vals))
542+
"})")))
543+
544+
(defn emit-lite-map [keys vals comma-sep distinct-keys?]
545+
(if (zero? (count keys))
546+
(emits "cljs.core.HashMap.EMPTY")
547+
(emits "cljs.core.HashMap.fromArrays([" (comma-sep keys) "], [" (comma-sep vals) "])")))
548+
528549
(defn emit-map [keys vals comma-sep distinct-keys?]
529550
(cond
530551
(zero? (count keys))
@@ -547,9 +568,14 @@
547568
"])")))
548569

549570
(defmethod emit* :map
550-
[{:keys [env keys vals]}]
571+
[{:keys [env form keys vals]}]
551572
(emit-wrap env
552-
(emit-map keys vals comma-sep distinct-keys?)))
573+
(if (lite-mode?)
574+
(let [form-keys (clojure.core/keys form)]
575+
(if (every? #(or (string? %) (keyword? %)) form-keys)
576+
(emit-obj-map (map obj-map-key form-keys) vals comma-sep distinct-keys?)
577+
(emit-lite-map keys vals comma-sep distinct-keys?)))
578+
(emit-map keys vals comma-sep distinct-keys?))))
553579

554580
(defn emit-list [items comma-sep]
555581
(if (empty? items)

0 commit comments

Comments
 (0)