diff options
author | Rich Hickey <richhickey@gmail.com> | 2008-09-19 15:25:44 +0000 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2008-09-19 15:25:44 +0000 |
commit | b5351ce1c2eb466376dae750658c67a6b6df7213 (patch) | |
tree | e463fe6c3118b54c157e94fa21b4c9bf40aca32d /src | |
parent | 0f5bd2ae6cb5471fa8c174f28d707c191a98d8c1 (diff) |
enhanced handling of reader errors during load
Diffstat (limited to 'src')
-rw-r--r-- | src/jvm/clojure/lang/Compiler.java | 4 | ||||
-rw-r--r-- | src/jvm/clojure/lang/LispReader.java | 12 |
2 files changed, 15 insertions, 1 deletions
diff --git a/src/jvm/clojure/lang/Compiler.java b/src/jvm/clojure/lang/Compiler.java index 4b3cb544..a44aa2e5 100644 --- a/src/jvm/clojure/lang/Compiler.java +++ b/src/jvm/clojure/lang/Compiler.java @@ -4255,6 +4255,10 @@ public static Object load(Reader rdr, String sourcePath, String sourceName) thro LINE_BEFORE.set(pushbackReader.getLineNumber()); } } + catch(LispReader.ReaderException e) + { + throw new CompilerException(sourceName,e.line,e.getCause()); + } finally { Var.popThreadBindings(); diff --git a/src/jvm/clojure/lang/LispReader.java b/src/jvm/clojure/lang/LispReader.java index b0592ee1..e3ef9fc2 100644 --- a/src/jvm/clojure/lang/LispReader.java +++ b/src/jvm/clojure/lang/LispReader.java @@ -97,6 +97,15 @@ static void unread(PushbackReader r, int ch) throws IOException{ r.unread(ch);
}
+static class ReaderException extends Exception{
+ final int line;
+
+ public ReaderException(int line, Throwable cause){
+ super(cause);
+ this.line = line;
+ }
+}
+
static public Object read(PushbackReader r, boolean eofIsError, Object eofValue, boolean isRecursive)
throws Exception{
@@ -161,7 +170,8 @@ static public Object read(PushbackReader r, boolean eofIsError, Object eofValue, if(isRecursive || !(r instanceof LineNumberingPushbackReader))
throw e;
LineNumberingPushbackReader rdr = (LineNumberingPushbackReader) r;
- throw new Exception(String.format("ReaderError:(%d,1) %s", rdr.getLineNumber(), e.getMessage()), e);
+ //throw new Exception(String.format("ReaderError:(%d,1) %s", rdr.getLineNumber(), e.getMessage()), e);
+ throw new ReaderException(rdr.getLineNumber(),e);
}
}
|