 
 (defn not-implemented
   [rdr ch]
-  (throw (str "Reader for " ch " not implemented yet")))
+  (reader-error rdr "Reader for " ch " not implemented yet"))
 
 (defn read-dispatch
   [rdr _]

       \# read-dispatch
       })

(def dispatch-macros
  {"{" read-set})

(defn read
  "Reads the first object from a PushbackReader. Returns the object read.
Returns sentinel if the reader did not contain any forms."
  [reader eof-is-error sentinel is-recursive]
  (let [ch (read-char reader)]
    (cond
     (nil? ch) sentinel
     (whitespace? ch) (recur reader eof-is-error sentinel is-recursive)
     (comment-prefix? ch) (recur (skip-line reader) eof-is-error sentinel is-recursive)
     (macros ch) ((macros ch) reader ch)
     (number-literal? reader ch) (read-number reader ch)
     :default (read-symbol reader ch))))
  (loop [buffer (gstring/StringBuffer.)
         ch (read-char reader)]
    (cond
     (nil? ch) (reader-error reader "EOF while reading string")
     (= "\\" ch) (recur (escape-char buffer reader) (read-char reader))
     (= \" ch) (. buffer (toString))
     :default (recur (do (.append buffer ch) buffer) (read-char reader)))))
