           :end-line end-line
           :end-column end-column})))))
 
+(defrecord SyntaxQuotedMap [val])
 (defn- read-map
   [rdr _]
   (let [[start-line start-column] (when (indexing-reader? 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]


    (coll? form)
    (cond
     (instance? SyntaxQuotedMap form) (syntax-quote-coll 'clojure.core/hash-map (:val form))
     (instance? SyntaxQuotedSet form) (syntax-quote-coll 'clojure.core/hash-set (:val form))

     (instance? IRecord form) form
     (map? form) (syntax-quote-coll 'clojure.core/hash-map (flatten-map form))
     (vector? form) (syntax-quote-coll 'clojure.core/vector form)
     (set? form) (syntax-quote-coll 'clojure.core/hash-set form)

     (or (seq? form) (list? form))
     (let [seq (seq form)]
       (if seq
