summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/jvm/clojure/lang/Compiler.java61
1 files changed, 36 insertions, 25 deletions
diff --git a/src/jvm/clojure/lang/Compiler.java b/src/jvm/clojure/lang/Compiler.java
index 357f1206..7bacaecb 100644
--- a/src/jvm/clojure/lang/Compiler.java
+++ b/src/jvm/clojure/lang/Compiler.java
@@ -3618,37 +3618,48 @@ private static Expr analyze(C context, Object form) throws Exception{
private static Expr analyze(C context, Object form, String name) throws Exception{
//todo symbol macro expansion?
- if(form == null)
- return NIL_EXPR;
- else if(form == Boolean.TRUE)
- return TRUE_EXPR;
- else if(form == Boolean.FALSE)
- return FALSE_EXPR;
- Class fclass = form.getClass();
- if(fclass == Symbol.class)
- return analyzeSymbol((Symbol) form);
- else if(fclass == Keyword.class)
- return registerKeyword((Keyword) form);
+ try
+ {
+ if(form == null)
+ return NIL_EXPR;
+ else if(form == Boolean.TRUE)
+ return TRUE_EXPR;
+ else if(form == Boolean.FALSE)
+ return FALSE_EXPR;
+ Class fclass = form.getClass();
+ if(fclass == Symbol.class)
+ return analyzeSymbol((Symbol) form);
+ else if(fclass == Keyword.class)
+ return registerKeyword((Keyword) form);
// else if(form instanceof Num)
// return new NumExpr((Num) form);
- else if(fclass == String.class)
- return new StringExpr(((String) form).intern());
+ else if(fclass == String.class)
+ return new StringExpr(((String) form).intern());
// else if(fclass == Character.class)
// return new CharExpr((Character) form);
- else if(form instanceof IPersistentCollection && ((IPersistentCollection) form).count() == 0)
- return new EmptyExpr(form);
- else if(form instanceof ISeq)
- return analyzeSeq(context, (ISeq) form, name);
- else if(form instanceof IPersistentVector)
- return VectorExpr.parse(context, (IPersistentVector) form);
- else if(form instanceof IPersistentMap)
- return MapExpr.parse(context, (IPersistentMap) form);
- else if(form instanceof IPersistentSet)
- return SetExpr.parse(context, (IPersistentSet) form);
+ else if(form instanceof IPersistentCollection && ((IPersistentCollection) form).count() == 0)
+ return new EmptyExpr(form);
+ else if(form instanceof ISeq)
+ return analyzeSeq(context, (ISeq) form, name);
+ else if(form instanceof IPersistentVector)
+ return VectorExpr.parse(context, (IPersistentVector) form);
+ else if(form instanceof IPersistentMap)
+ return MapExpr.parse(context, (IPersistentMap) form);
+ else if(form instanceof IPersistentSet)
+ return SetExpr.parse(context, (IPersistentSet) form);
// else
- //throw new UnsupportedOperationException();
- return new ConstantExpr(form);
+ //throw new UnsupportedOperationException();
+ return new ConstantExpr(form);
+ }
+ catch(Throwable e)
+ {
+ if(!(e instanceof CompilerException))
+ throw new CompilerException(String.format("%s:%d: %s", SOURCE.get(), (Integer) LINE.get(), e.getMessage()),
+ e);
+ else
+ throw (CompilerException) e;
+ }
}
static public class CompilerException extends Exception{