diff options
author | Rich Hickey <richhickey@gmail.com> | 2009-04-12 13:50:39 +0000 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2009-04-12 13:50:39 +0000 |
commit | ac2374f91a047f119127163a96158d2eb9a204b7 (patch) | |
tree | 56ebdbd650725a750e3339ce052f13f73541d5d8 /src | |
parent | 0a8ac6b185348290c5af15c4bfdeda84a5a98592 (diff) |
flag to control eval reader (*read-eval*) [issue 34], patch from jhawk28
Diffstat (limited to 'src')
-rw-r--r-- | src/clj/clojure/core.clj | 7 | ||||
-rw-r--r-- | src/jvm/clojure/lang/LispReader.java | 5 | ||||
-rw-r--r-- | src/jvm/clojure/lang/RT.java | 1 |
3 files changed, 13 insertions, 0 deletions
diff --git a/src/clj/clojure/core.clj b/src/clj/clojure/core.clj index fceded48..20c73c99 100644 --- a/src/clj/clojure/core.clj +++ b/src/clj/clojure/core.clj @@ -4019,6 +4019,13 @@ Defaults to true") +(add-doc *read-eval* + "When set to logical false, the EvalReader (#=(...)) is disabled in the + read/load in the thread-local binding. + Example: (binding [*read-eval* false] (read-string \"#=(eval (def x 3))\")) + + Defaults to true") + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; helper files ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (alter-meta! (find-ns 'clojure.core) assoc :doc "Fundamental library of the Clojure language") (load "core_proxy") diff --git a/src/jvm/clojure/lang/LispReader.java b/src/jvm/clojure/lang/LispReader.java index 911a42be..14c39399 100644 --- a/src/jvm/clojure/lang/LispReader.java +++ b/src/jvm/clojure/lang/LispReader.java @@ -903,6 +903,11 @@ static class CtorReader extends AFn{ public static class EvalReader extends AFn{ public Object invoke(Object reader, Object eq) throws Exception{ + if (!RT.booleanCast(RT.READEVAL.deref())) + { + throw new Exception("EvalReader not allowed when *read-eval* is false."); + } + PushbackReader r = (PushbackReader) reader; Object o = read(r, true, null, true); if(o instanceof Symbol) diff --git a/src/jvm/clojure/lang/RT.java b/src/jvm/clojure/lang/RT.java index a1d975c3..fdd83fd3 100644 --- a/src/jvm/clojure/lang/RT.java +++ b/src/jvm/clojure/lang/RT.java @@ -178,6 +178,7 @@ final static public Var ERR = new PrintWriter(new OutputStreamWriter(System.err, UTF8), true)); final static Keyword TAG_KEY = Keyword.intern(null, "tag"); final static public Var AGENT = Var.intern(CLOJURE_NS, Symbol.create("*agent*"), null); +final static public Var READEVAL = Var.intern(CLOJURE_NS, Symbol.create("*read-eval*"), T); final static public Var MACRO_META = Var.intern(CLOJURE_NS, Symbol.create("*macro-meta*"), null); final static public Var MATH_CONTEXT = Var.intern(CLOJURE_NS, Symbol.create("*math-context*"), null); static Keyword LINE_KEY = Keyword.intern(null, "line"); |