       (instance? IRecord form) form
       (map? form) (list 'clojure.core/apply 'clojure.core/hash-map
                         (list 'clojure.core/seq (cons 'clojure.core/concat (expand-list
-                                                                            (seq (flatten-map form))))))
+                                                                            (flatten-map form)))))
       (vector? form) (list 'clojure.core/apply 'clojure.core/vector
                            (list 'clojure.core/seq (cons 'clojure.core/concat
                                                          (expand-list (seq form)))))

        (recur (next s) (-> key-vals
                            (conj! (key e))
                            (conj! (val e)))))
      (persistent! key-vals))))

(defn- register-gensym [sym]
  (if-not gensym-env

  [rdr & msg]
  (throw (ex-info (apply str msg)
                  (merge {:type :reader-exception}
                         (if (instance? IndexingPushbackReader (class rdr))
                           {:line (get-line-number rdr)
                            :column (get-column-number rdr)})))))

(defn macro-terminating? [ch]
  (and (not (identical? \# ^char ch))
       (not (identical? \' ^char ch))
       ;;(not= ch \:) ;; why?
       (macros ch)))

(defn ^String read-token
  [rdr initch]
  (if-not initch
    (reader-error rdr "EOF while reading")
    (loop [sb (doto (StringBuilder.) (.append initch))
           ch (peek-char rdr)]
      (if (or (nil? ch)
