summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/clj/clojure/boot.clj4
-rw-r--r--src/jvm/clojure/lang/Compiler.java5
-rw-r--r--src/jvm/clojure/lang/LispReader.java7
3 files changed, 14 insertions, 2 deletions
diff --git a/src/clj/clojure/boot.clj b/src/clj/clojure/boot.clj
index b7d7ac78..4415d9bc 100644
--- a/src/clj/clojure/boot.clj
+++ b/src/clj/clojure/boot.clj
@@ -3495,7 +3495,9 @@
(.write w ")"))
(defmethod print-method :default [o, #^Writer w]
- (print-ctor o #(print-method (str %1) %2) w))
+ (.write w "#<")
+ (.write w (str o))
+ (.write w ">"))
(defmethod print-method clojure.lang.Keyword [o, #^Writer w]
(.write w (str o)))
diff --git a/src/jvm/clojure/lang/Compiler.java b/src/jvm/clojure/lang/Compiler.java
index 32522079..925cf639 100644
--- a/src/jvm/clojure/lang/Compiler.java
+++ b/src/jvm/clojure/lang/Compiler.java
@@ -3045,7 +3045,10 @@ static public class FnExpr implements Expr{
for(int i = 0; i < constants.count(); i++)
{
- clinitgen.push(RT.printString(constants.nth(i)));
+ String cs = RT.printString(constants.nth(i));
+ if(cs.startsWith("#<"))
+ throw new RuntimeException("Can't embed unreadable object in code: " + cs);
+ clinitgen.push(cs);
clinitgen.invokeStatic(RT_TYPE, readStringMethod);
// clinitgen.dup();
// clinitgen.push(i);
diff --git a/src/jvm/clojure/lang/LispReader.java b/src/jvm/clojure/lang/LispReader.java
index 40917b7e..963253d0 100644
--- a/src/jvm/clojure/lang/LispReader.java
+++ b/src/jvm/clojure/lang/LispReader.java
@@ -88,6 +88,7 @@ static
dispatchMacros['('] = new FnReader();
dispatchMacros['{'] = new SetReader();
dispatchMacros['='] = new EvalReader();
+ dispatchMacros['<'] = new UnreadableReader();
}
static boolean isWhitespace(int ch){
@@ -950,6 +951,12 @@ static class UnmatchedDelimiterReader extends AFn{
}
+static class UnreadableReader extends AFn{
+ public Object invoke(Object reader, Object leftangle) throws Exception{
+ throw new Exception("Unreadable form");
+ }
+}
+
public static List readDelimitedList(char delim, PushbackReader r, boolean isRecursive) throws Exception{
ArrayList a = new ArrayList();