 (core/defmacro vector
   ([] '(.-EMPTY cljs.core/PersistentVector))
   ([& xs]
-    (let [cnt (count xs)]
-      (if (core/< cnt 32)
-        `(cljs.core/PersistentVector. nil ~cnt 5
-           (.-EMPTY-NODE cljs.core/PersistentVector) (array ~@xs) nil)
-        (vary-meta
-          `(.fromArray cljs.core/PersistentVector (array ~@xs) true)
-          assoc :tag 'cljs.core/PersistentVector)))))
+   (core/let [cnt (count xs)]
+     (if (core/< cnt 32)
+       `(cljs.core/PersistentVector. nil ~cnt 5
+          (.-EMPTY-NODE cljs.core/PersistentVector) (array ~@xs) nil)
+       (vary-meta
+         `(.fromArray cljs.core/PersistentVector (array ~@xs) true)
+         assoc :tag 'cljs.core/PersistentVector)))))
 
 (core/defmacro array-map
   ([] '(.-EMPTY cljs.core/PersistentArrayMap))
   ([& kvs]
-     (let [keys (map first (partition 2 kvs))]
-       (if (core/and (every? #(= (:op %) :constant)
-                       (map #(cljs.analyzer/analyze &env %) keys))
-                     (= (count (into #{} keys)) (count keys)))
-         `(cljs.core/PersistentArrayMap. nil ~(clojure.core// (count kvs) 2) (array ~@kvs) nil)
-         `(.fromArray cljs.core/PersistentArrayMap (array ~@kvs) true false)))))
+   (core/let [keys (map first (partition 2 kvs))]
+     (if (core/and (every? #(= (:op %) :constant)
+                     (map #(cljs.analyzer/analyze &env %) keys))
+           (= (count (into #{} keys)) (count keys)))
+       `(cljs.core/PersistentArrayMap. nil ~(clojure.core// (count kvs) 2) (array ~@kvs) nil)
+       `(.fromArray cljs.core/PersistentArrayMap (array ~@kvs) true false)))))
 
 (core/defmacro hash-map
   ([] `(.-EMPTY cljs.core/PersistentHashMap))
   ([& kvs]
-    (let [pairs (partition 2 kvs)
-          ks    (map first pairs)
-          vs    (map second pairs)]
-      (vary-meta
-        `(.fromArrays cljs.core/PersistentHashMap (array ~@ks) (array ~@vs))
-        assoc :tag 'cljs.core/PersistentHashMap))))
+   (core/let [pairs (partition 2 kvs)
+              ks    (map first pairs)
+              vs    (map second pairs)]
+     (vary-meta
+       `(.fromArrays cljs.core/PersistentHashMap (array ~@ks) (array ~@vs))
+       assoc :tag 'cljs.core/PersistentHashMap))))
 
 (core/defmacro hash-set
   ([] `(.-EMPTY cljs.core/PersistentHashSet))

               cached-hierarchy# (atom {})
               hierarchy# (get ~options :hierarchy (cljs.core/get-global-hierarchy))]
           (cljs.core/MultiFn. (cljs.core/symbol ~mm-ns ~(name mm-name)) ~dispatch-fn ~default hierarchy#
                               method-table# prefer-table# method-cache# cached-hierarchy#))))))

(core/defmacro defmethod
  "Creates and installs a new method of multimethod associated with dispatch-value. "

  ([] nil)
  ([x] x)
  ([x & next]
   (core/let [forms (concat [x] next)]
     (if (every? #(simple-test-expr? &env %)
           (map #(cljs.analyzer/analyze &env %) forms))
       (core/let [or-str (->> (repeat (count forms) "(~{})")
                           (interpose " || ")
                           (apply core/str))]
         (bool-expr `(~'js* ~or-str ~@forms)))
       `(let [or# ~x]
          (if or# or# (or ~@next)))))))

(core/defmacro nil? [x]
  `(coercive-= ~x nil))
