diff options
author | Rich Hickey <richhickey@gmail.com> | 2011-03-17 13:24:30 -0400 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2011-03-17 13:24:30 -0400 |
commit | e3381eaf8593f77406af44224ed762304a887158 (patch) | |
tree | fdfa9306004168382826e9513425aab13637f85e | |
parent | 610f4fe49c119a99d7aa27a4eaadff51210ee00e (diff) |
bind *unchecked-math* during init and load
-rw-r--r-- | src/jvm/clojure/lang/Compiler.java | 11 | ||||
-rw-r--r-- | src/jvm/clojure/lang/RT.java | 10 |
2 files changed, 12 insertions, 9 deletions
diff --git a/src/jvm/clojure/lang/Compiler.java b/src/jvm/clojure/lang/Compiler.java index 1fc04492..4800124a 100644 --- a/src/jvm/clojure/lang/Compiler.java +++ b/src/jvm/clojure/lang/Compiler.java @@ -237,9 +237,6 @@ static final public Var INSTANCE = Var.intern(Namespace.findOrCreate(Symbol.inte static final public Var ADD_ANNOTATIONS = Var.intern(Namespace.findOrCreate(Symbol.intern("clojure.core")), Symbol.intern("add-annotations")); -//boolean -static final public Var UNCHECKED_MATH = Var.intern(Namespace.findOrCreate(Symbol.intern("clojure.core")), - Symbol.intern("*unchecked-math*"), Boolean.FALSE).setDynamic(); //Integer static final public Var LINE = Var.create(0).setDynamic(); @@ -817,7 +814,7 @@ static public abstract class HostExpr implements Expr, MaybePrimitiveExpr{ { Method m = null; gen.checkCast(NUMBER_TYPE); - if(RT.booleanCast(UNCHECKED_MATH.deref())) + if(RT.booleanCast(RT.UNCHECKED_MATH.deref())) { if(paramType == int.class) m = Method.getMethod("int uncheckedIntCast(Object)"); @@ -1242,7 +1239,7 @@ static abstract class MethodExpr extends HostExpr{ { final MaybePrimitiveExpr pe = (MaybePrimitiveExpr) e; pe.emitUnboxed(C.EXPRESSION, objx, gen); - if(RT.booleanCast(UNCHECKED_MATH.deref())) + if(RT.booleanCast(RT.UNCHECKED_MATH.deref())) gen.invokeStatic(RT_TYPE, Method.getMethod("int uncheckedIntCast(long)")); else gen.invokeStatic(RT_TYPE, Method.getMethod("int intCast(long)")); @@ -6725,7 +6722,7 @@ public static Object load(Reader rdr, String sourcePath, String sourceName) thro RT.CURRENT_NS, RT.CURRENT_NS.deref(), LINE_BEFORE, pushbackReader.getLineNumber(), LINE_AFTER, pushbackReader.getLineNumber() - ,UNCHECKED_MATH, UNCHECKED_MATH.deref() + ,RT.UNCHECKED_MATH, RT.UNCHECKED_MATH.deref() ,RT.WARN_ON_REFLECTION, RT.WARN_ON_REFLECTION.deref() )); @@ -6850,7 +6847,7 @@ public static Object compile(Reader rdr, String sourcePath, String sourceName) t CONSTANT_IDS, new IdentityHashMap(), KEYWORDS, PersistentHashMap.EMPTY, VARS, PersistentHashMap.EMPTY - ,UNCHECKED_MATH, UNCHECKED_MATH.deref() + ,RT.UNCHECKED_MATH, RT.UNCHECKED_MATH.deref() ,RT.WARN_ON_REFLECTION, RT.WARN_ON_REFLECTION.deref() // ,LOADER, RT.makeClassLoader() )); diff --git a/src/jvm/clojure/lang/RT.java b/src/jvm/clojure/lang/RT.java index 1b37bb6f..8dc55f2f 100644 --- a/src/jvm/clojure/lang/RT.java +++ b/src/jvm/clojure/lang/RT.java @@ -188,6 +188,10 @@ static Keyword DECLARED_KEY = Keyword.intern(null, "declared"); static Keyword DOC_KEY = Keyword.intern(null, "doc"); final static public Var USE_CONTEXT_CLASSLOADER = Var.intern(CLOJURE_NS, Symbol.intern("*use-context-classloader*"), T).setDynamic(); +//boolean +static final public Var UNCHECKED_MATH = Var.intern(Namespace.findOrCreate(Symbol.intern("clojure.core")), + Symbol.intern("*unchecked-math*"), Boolean.FALSE).setDynamic(); + //final static public Var CURRENT_MODULE = Var.intern(Symbol.intern("clojure.core", "current-module"), // Module.findOrCreateModule("clojure/user")); @@ -399,7 +403,8 @@ static public void load(String scriptbase, boolean failIfNotFound) throws Except try { Var.pushThreadBindings( RT.map(CURRENT_NS, CURRENT_NS.deref(), - WARN_ON_REFLECTION, WARN_ON_REFLECTION.deref())); + WARN_ON_REFLECTION, WARN_ON_REFLECTION.deref() + ,RT.UNCHECKED_MATH, RT.UNCHECKED_MATH.deref())); loaded = (loadClassForName(scriptbase.replace('/', '.') + LOADER_SUFFIX) != null); } finally { @@ -421,7 +426,8 @@ static void doInit() throws Exception{ Var.pushThreadBindings( RT.map(CURRENT_NS, CURRENT_NS.deref(), - WARN_ON_REFLECTION, WARN_ON_REFLECTION.deref())); + WARN_ON_REFLECTION, WARN_ON_REFLECTION.deref() + ,RT.UNCHECKED_MATH, RT.UNCHECKED_MATH.deref())); try { Symbol USER = Symbol.intern("user"); Symbol CLOJURE = Symbol.intern("clojure.core"); |