               (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))

         (if (newline? c)
           (str s)
           (recur (read-char rdr) (.append s c)))))))

                           e)))))))

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

