summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRich Hickey <richhickey@gmail.com>2009-04-12 13:50:39 +0000
committerRich Hickey <richhickey@gmail.com>2009-04-12 13:50:39 +0000
commitac2374f91a047f119127163a96158d2eb9a204b7 (patch)
tree56ebdbd650725a750e3339ce052f13f73541d5d8 /src
parent0a8ac6b185348290c5af15c4bfdeda84a5a98592 (diff)
flag to control eval reader (*read-eval*) [issue 34], patch from jhawk28
Diffstat (limited to 'src')
-rw-r--r--src/clj/clojure/core.clj7
-rw-r--r--src/jvm/clojure/lang/LispReader.java5
-rw-r--r--src/jvm/clojure/lang/RT.java1
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");