diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/jvm/clojure/lang/Numbers.java | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/jvm/clojure/lang/Numbers.java b/src/jvm/clojure/lang/Numbers.java index 8462a4be..e40fe39a 100644 --- a/src/jvm/clojure/lang/Numbers.java +++ b/src/jvm/clojure/lang/Numbers.java @@ -457,7 +457,10 @@ final static class IntegerOps implements Ops{ //public Number subtract(Number x, Number y); final public Number negate(Number x){ - return -x.intValue(); + int val = x.intValue(); + if(val > Integer.MIN_VALUE) + return -val; + return -((long) val); } public Number inc(Number x){ @@ -583,7 +586,10 @@ final static class LongOps implements Ops{ //public Number subtract(Number x, Number y); final public Number negate(Number x){ - return -x.longValue(); + long val = x.longValue(); + if(val > Long.MIN_VALUE) + return -val; + return BigInteger.valueOf(val).negate(); } public Number inc(Number x){ |