       (when (== -1 (.read is buf))
         (set! buf nil)))
     (when buf
-      (char (aget buf 0)))))
+      (char (aget buf 0))))
+  Closeable
+  (close [this]
+    (.close is)))
 
 (deftype PushbackReader
     [rdr ^"[Ljava.lang.Object;" buf buf-len ^:unsynchronized-mutable buf-pos]

  IndexingReader
  (get-line-number [reader] (int line))
  (get-column-number [reader] (int column))
  (get-file-name [reader] file-name))

(defn log-source*
  [reader f]

  IndexingReader
  (get-line-number [reader] (int line))
  (get-column-number [reader] (int column))
  (get-file-name [reader] file-name)

  Closeable
  (close [this]
    (when (instance? Closeable rdr)
      (.close ^Closeable rdr))))

;; Java interop

(extend-type java.io.PushbackReader
  Reader
