diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/clj/clojure/boot.clj | 4 | ||||
-rw-r--r-- | src/jvm/clojure/lang/Compiler.java | 5 | ||||
-rw-r--r-- | src/jvm/clojure/lang/LispReader.java | 7 |
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();
|