 
 (defn read-meta
   [rdr _]
-  (let [[line column] (if (instance? IndexingPushbackReader (class rdr))
+  (let [[line column] (if (satisfies? IndexingReader rdr)
                         [(get-line-number rdr) (dec (get-column-number rdr))])
         m (desugar-meta (read rdr true nil true))]
     (when-not (map? m)


(defn ^PersistentVector read-delimited-list
  [delim rdr recursive?]
  (let [first-line (if (instance? IndexingPushbackReader (class rdr))
                     (get-line-number rdr))]
    (loop [a (transient [])]
      (let [ch (read-past whitespace? rdr)]
        (when-not ch
          (reader-error rdr "EOF while reading"
                        (if first-line
                          (str ", starting at line" first-line))))
        (if (identical? ^char delim ^char  ch)
          (persistent! a)
          (if-let [macrofn (macros ch)]
            (let [mret (macrofn rdr ch)]
              (recur (if-not (= mret rdr) (conj! a mret) a)))
            (do
              (unread rdr ch)
              (let [o (read rdr true nil recursive?)]
                (recur (if-not (= o rdr) (conj! a o) a))))))))))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; data structure readers

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

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