   IndexingReader
   (get-line-number [reader] (int line))
   (get-column-number [reader] (int column))
-  (get-file-name [reader] file-name))
+  (get-file-name [reader] file-name)
+
+  Closeable
+  (close [this]
+    (when (instance? Closeable rdr)
+      (.close ^Closeable rdr))))
 
 (defn log-source*
   [reader f]

    (when ch
      (if (zero? buf-pos) (throw (RuntimeException. "Pushback buffer is full")))
      (update! buf-pos dec)
      (aset buf buf-pos ch))))

(defn- normalize-newline [rdr ch]
  (if (identical? \return ch)

      (when (== -1 (.read is buf))
        (set! buf nil)))
    (when buf
      (char (aget buf 0))))
  Closeable
  (close [this]
    (.close is)))

(deftype PushbackReader
    [rdr ^"[Ljava.lang.Object;" buf buf-len ^:unsynchronized-mutable buf-pos]
