         map-count (count the-map)
         [end-line end-column] (when (indexing-reader? rdr)
                                 [(get-line-number rdr) (int (get-column-number rdr))])]
-    (when (odd? map-count)
+    (when (and (odd? map-count)
+               (or (not gensym-env)
+                   (not-any? #(= 'clojure.core/unquote-splicing (first %))
+                           (filter seq? the-map))))
       (reader-error rdr "Map literal must contain an even number of forms"))
     (with-meta
       (if (zero? map-count)
         {}
-        (RT/map (to-array the-map)))
+        (if gensym-env
+          (SyntaxQuotedMap. the-map)
+          (RT/map (to-array the-map))))
       (when start-line
         (merge
          (when-let [file (get-file-name rdr)]


(defn- read-unquote
  [rdr comma]
  (if-let [ch (peek-char rdr)]
    (if (identical? \@ ch)
      ((wrapping-reader 'clojure.core/unquote-splicing) (doto rdr read-char) \@)
      ((wrapping-reader 'clojure.core/unquote) rdr \~))))

(declare syntax-quote*)
(defn- unquote-splicing? [form]

          :end-line end-line
          :end-column end-column})))))

(defrecord SyntaxQuotedMap [val])
(defn- read-map
  [rdr _]
  (let [[start-line start-column] (when (indexing-reader? rdr)
