          (if (newline? c)
            (str s)
            (recur (read-char rdr) (.append s c)))))))
-
-(defn unsafe-read
-  "Reads the first object from an IPushbackReader or a java.io.PushbackReader.
-Returns the object read. If EOF, throws if eof-error? is true. Otherwise returns sentinel.
-Unsafe, #= is allowed if *read-eval* is bound to true"
-  ([]  (unsafe-read *in*))
-  ([reader] (unsafe-read reader true nil))
-  ([reader eof-error? sentinel] (unsafe-read reader eof-error? sentinel false))
-  ([^clojure.tools.reader.IPushbackReader reader eof-error? sentinel recursive?]
-     (binding [*unsafe-read* true]
-       (read reader eof-error? sentinel recursive?))))
-
-(defn unsafe-read-string
-  "Reads one object from the string s.
-Unsafe, #= is allowed if *read-eval* is bound to true"
-  [s]
-  (unsafe-read (string-push-back-reader s) true nil false))


(defn read
  "Reads the first object from an IPushbackReader or a java.io.PushbackReader.
Returns the object read. If EOF, throws if eof-error? is true. Otherwise returns sentinel.
Safe, #= is not allowed"
  ([] (read *in*))
  ([reader] (read reader true nil))
  ([reader eof-error? sentinel] (read reader eof-error? sentinel false))

                           e)))))))

(defn read-string
  "Reads one object from the string s"
  [s]
  (read (string-push-back-reader s) true nil false))

