summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/jvm/clojure/lang/Compiler.java23
-rw-r--r--src/jvm/clojure/lang/RT.java1
2 files changed, 13 insertions, 11 deletions
diff --git a/src/jvm/clojure/lang/Compiler.java b/src/jvm/clojure/lang/Compiler.java
index 04358382..d037186e 100644
--- a/src/jvm/clojure/lang/Compiler.java
+++ b/src/jvm/clojure/lang/Compiler.java
@@ -1724,17 +1724,16 @@ static class ConstantExpr extends LiteralExpr{
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) v).count() == 0)
-// return new EmptyExpr(v);
+ else if(v == Boolean.TRUE)
+ return TRUE_EXPR;
+ else if(v == Boolean.FALSE)
+ return FALSE_EXPR;
+ if(v instanceof Number)
+ return NumberExpr.parse((Number)v);
+ else if(v instanceof String)
+ return new StringExpr((String) v);
+ else if(v instanceof IPersistentCollection && ((IPersistentCollection) v).count() == 0)
+ return new EmptyExpr(v);
else
return new ConstantExpr(v);
}
@@ -6492,6 +6491,8 @@ private static Expr analyzeSymbol(Symbol sym) {
Var v = (Var) o;
if(isMacro(v) != null)
throw Util.runtimeException("Can't take value of a macro: " + v);
+ if(RT.booleanCast(RT.get(v.meta(),RT.CONST_KEY)))
+ return analyze(C.EXPRESSION, RT.list(QUOTE, v.get()));
registerVar(v);
return new VarExpr(v, tag);
}
diff --git a/src/jvm/clojure/lang/RT.java b/src/jvm/clojure/lang/RT.java
index 65e2bbb3..c467d31e 100644
--- a/src/jvm/clojure/lang/RT.java
+++ b/src/jvm/clojure/lang/RT.java
@@ -179,6 +179,7 @@ final static public Var ERR =
Var.intern(CLOJURE_NS, Symbol.intern("*err*"),
new PrintWriter(new OutputStreamWriter(System.err), true)).setDynamic();
final static Keyword TAG_KEY = Keyword.intern(null, "tag");
+final static Keyword CONST_KEY = Keyword.intern(null, "const");
final static public Var AGENT = Var.intern(CLOJURE_NS, Symbol.intern("*agent*"), null).setDynamic();
final static public Var READEVAL = Var.intern(CLOJURE_NS, Symbol.intern("*read-eval*"), T).setDynamic();
final static public Var ASSERT = Var.intern(CLOJURE_NS, Symbol.intern("*assert*"), T).setDynamic();