    (IndexingPushbackReader.
     (to-pbr s-or-rdr buf-len) 1 1 true nil 0 file-name)))
 
-(defn source-logging-push-back-reader
+(defn ^Closeable source-logging-push-back-reader
   "Creates a SourceLoggingPushbackReader from a given string or PushbackReader"
   ([s-or-rdr]
    (source-logging-push-back-reader s-or-rdr 1))

(defprotocol ReaderCoercer
  (to-rdr [rdr]))

(declare string-reader pushback-reader)

(extend-protocol ReaderCoercer
  Object

  ([^String s]
   (StringReader. s (count s) 0)))

(defn ^Closeable push-back-reader
  "Creates a PushbackReader from a given reader or string"
  ([rdr] (push-back-reader rdr 1))
  ([rdr buf-len] (PushbackReader. (to-rdr rdr) (object-array buf-len) buf-len buf-len)))

(defn ^Closeable string-push-back-reader
  "Creates a PushbackReader from a given string"
  ([s]
   (string-push-back-reader s 1))
  ([^String s buf-len]
   (push-back-reader (string-reader s) buf-len)))

(defn ^Closeable input-stream-reader
  "Creates an InputStreamReader from an InputStream"
  [is]
  (InputStreamReader. is nil))

(defn ^Closeable input-stream-push-back-reader
  "Creates a PushbackReader from a given InputStream"
  ([is]
   (input-stream-push-back-reader is 1))
  ([^InputStream is buf-len]
   (push-back-reader (input-stream-reader is) buf-len)))

(defn ^Closeable indexing-push-back-reader
  "Creates an IndexingPushbackReader from a given string or PushbackReader"
  ([s-or-rdr]
   (indexing-push-back-reader s-or-rdr 1))
