diff options
author | Alexander Taggart <alex.taggart@expojure.com> | 2011-04-25 13:52:22 -0700 |
---|---|---|
committer | Stuart Halloway <stu@thinkrelevance.com> | 2011-05-06 09:44:37 -0400 |
commit | bf22d2a456909f40faa03f87e9509ff28b96abe0 (patch) | |
tree | 7fe382ca050ed05462373c9280bdfdcad1a48c61 /src/jvm/clojure | |
parent | 6fb09f402c5448070a2efc64ebd64285480b263f (diff) |
Fix false-negative test for (long Float/MAX_VALUE) and (long Double/MAX_VALUE). Fix unintentionally unchecked conversion of decimal objects to long.
Signed-off-by: Stuart Halloway <stu@thinkrelevance.com>
Diffstat (limited to 'src/jvm/clojure')
-rw-r--r-- | src/jvm/clojure/lang/RT.java | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/src/jvm/clojure/lang/RT.java b/src/jvm/clojure/lang/RT.java index c467d31e..d19319e0 100644 --- a/src/jvm/clojure/lang/RT.java +++ b/src/jvm/clojure/lang/RT.java @@ -1000,7 +1000,12 @@ static public long longCast(Object x){ else throw new IllegalArgumentException("Value out of range for long: " + x); } - return ((Number) x).longValue(); + else if (x instanceof Byte || x instanceof Short) + return ((Number) x).longValue(); + else if (x instanceof Ratio) + return longCast(((Ratio)x).bigIntegerValue()); + else + return longCast(((Number)x).doubleValue()); } static public long longCast(int x){ |