summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRich Hickey <richhickey@gmail.com>2008-09-19 15:25:44 +0000
committerRich Hickey <richhickey@gmail.com>2008-09-19 15:25:44 +0000
commitb5351ce1c2eb466376dae750658c67a6b6df7213 (patch)
treee463fe6c3118b54c157e94fa21b4c9bf40aca32d /src
parent0f5bd2ae6cb5471fa8c174f28d707c191a98d8c1 (diff)
enhanced handling of reader errors during load
Diffstat (limited to 'src')
-rw-r--r--src/jvm/clojure/lang/Compiler.java4
-rw-r--r--src/jvm/clojure/lang/LispReader.java12
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);
}
}