summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/jvm/clojure/lang/Compiler.java17
1 files changed, 16 insertions, 1 deletions
diff --git a/src/jvm/clojure/lang/Compiler.java b/src/jvm/clojure/lang/Compiler.java
index e6d58211..aefd72b2 100644
--- a/src/jvm/clojure/lang/Compiler.java
+++ b/src/jvm/clojure/lang/Compiler.java
@@ -894,7 +894,22 @@ static class QuoteExpr extends LiteralExpr{
static class Parser implements IParser{
public Expr parse(C context, Object form){
Object v = RT.second(form);
- return new QuoteExpr(v);
+
+ if(v == null)
+ return NIL_EXPR;
+ Class fclass = v.getClass();
+ if(fclass == Keyword.class)
+ return registerKeyword((Keyword) v);
+ else if(v instanceof Num)
+ return new NumExpr((Num) v);
+ else if(fclass == String.class)
+ return new StringExpr((String) v);
+ else if(fclass == Character.class)
+ return new CharExpr((Character) v);
+ else if(v instanceof IPersistentCollection && ((IPersistentCollection) form).count() == 0)
+ return new EmptyExpr(v);
+ else
+ return new QuoteExpr(v);
}
}
}