                            e)))))))
 
 (defn read-string
-  "Reads one object from the string s.
-Safe, #= is not allowed"
+  "Reads one object from the string s"
   [s]
   (read (string-push-back-reader s) true nil false))
 

              (throw (IllegalStateException. "Arg literal must be %, %& or %integer"))
              (register-arg n))))))))

(def ^:private ^:dynamic *unsafe-read* false)

(defn read-eval
  [rdr _]
  (when-not *read-eval*
    (reader-error rdr "#= not allowed when *read-eval* is false"))
  (when-not *unsafe-read*
    (reader-error rdr "#= only allowed when using the unsafe- variants of read and read-string"))
  (let [o (read rdr true nil true)]
    (if (symbol? o)
      (RT/classForName (str ^Symbol o))


(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."
  ([] (read *in*))
  ([reader] (read reader true nil))
  ([reader eof-error? sentinel] (read reader eof-error? sentinel false))
