summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/clj/clojure/core.clj18
-rw-r--r--src/clj/clojure/main.clj2
-rw-r--r--src/clj/clojure/pprint/cl_format.clj4
-rw-r--r--src/clj/clojure/pprint/column_writer.clj2
-rw-r--r--src/clj/clojure/pprint/pretty_writer.clj2
-rw-r--r--src/jvm/clojure/lang/Compiler.java5
-rw-r--r--src/jvm/clojure/lang/Numbers.java101
-rw-r--r--src/jvm/clojure/lang/Reflector.java10
8 files changed, 70 insertions, 74 deletions
diff --git a/src/clj/clojure/core.clj b/src/clj/clojure/core.clj
index e63a10d8..b35722b6 100644
--- a/src/clj/clojure/core.clj
+++ b/src/clj/clojure/core.clj
@@ -2953,43 +2953,37 @@
(defn long
"Coerce to long"
- {:tag Long
- :inline (fn [x] `(. clojure.lang.RT (longCast ~x)))
+ {:inline (fn [x] `(. clojure.lang.RT (longCast ~x)))
:added "1.0"}
[^Number x] (clojure.lang.RT/longCast x))
(defn float
"Coerce to float"
- {:tag Float
- :inline (fn [x] `(. clojure.lang.RT (floatCast ~x)))
+ {:inline (fn [x] `(. clojure.lang.RT (floatCast ~x)))
:added "1.0"}
[^Number x] (clojure.lang.RT/floatCast x))
(defn double
"Coerce to double"
- {:tag Double
- :inline (fn [x] `(. clojure.lang.RT (doubleCast ~x)))
+ {:inline (fn [x] `(. clojure.lang.RT (doubleCast ~x)))
:added "1.0"}
[^Number x] (clojure.lang.RT/doubleCast x))
(defn short
"Coerce to short"
- {:tag Short
- :inline (fn [x] `(. clojure.lang.RT (shortCast ~x)))
+ {:inline (fn [x] `(. clojure.lang.RT (shortCast ~x)))
:added "1.0"}
[^Number x] (clojure.lang.RT/shortCast x))
(defn byte
"Coerce to byte"
- {:tag Byte
- :inline (fn [x] `(. clojure.lang.RT (byteCast ~x)))
+ {:inline (fn [x] `(. clojure.lang.RT (byteCast ~x)))
:added "1.0"}
[^Number x] (clojure.lang.RT/byteCast x))
(defn char
"Coerce to char"
- {:tag Character
- :inline (fn [x] `(. clojure.lang.RT (charCast ~x)))
+ {:inline (fn [x] `(. clojure.lang.RT (charCast ~x)))
:added "1.1"}
[x] (. clojure.lang.RT (charCast x)))
diff --git a/src/clj/clojure/main.clj b/src/clj/clojure/main.clj
index 31cdd957..61fcae75 100644
--- a/src/clj/clojure/main.clj
+++ b/src/clj/clojure/main.clj
@@ -72,7 +72,7 @@
(= c (int \newline)) :line-start
(= c -1) :stream-end
(= c (int \;)) (do (.readLine s) :line-start)
- (or (Character/isWhitespace c) (= c (int \,))) (recur (.read s))
+ (or (Character/isWhitespace (char c)) (= c (int \,))) (recur (.read s))
:else (do (.unread s c) :body))))
(defn repl-read
diff --git a/src/clj/clojure/pprint/cl_format.clj b/src/clj/clojure/pprint/cl_format.clj
index b5addeb8..22bb11b2 100644
--- a/src/clj/clojure/pprint/cl_format.clj
+++ b/src/clj/clojure/pprint/cl_format.clj
@@ -1095,9 +1095,9 @@ Note this should only be used for the last one in the sequence"
Integer
(let [c (char x)]
- (let [mod-c (if @last-was-whitespace? (Character/toUpperCase ^Character (char x)) c)]
+ (let [mod-c (if @last-was-whitespace? (Character/toUpperCase (char x)) c)]
(.write writer (int mod-c))
- (dosync (ref-set last-was-whitespace? (Character/isWhitespace ^Character (char x))))))))))))
+ (dosync (ref-set last-was-whitespace? (Character/isWhitespace (char x))))))))))))
(defn- init-cap-writer
"Returns a proxy that wraps writer, capitalizing the first word"
diff --git a/src/clj/clojure/pprint/column_writer.clj b/src/clj/clojure/pprint/column_writer.clj
index ae996e22..f02ac0dc 100644
--- a/src/clj/clojure/pprint/column_writer.clj
+++ b/src/clj/clojure/pprint/column_writer.clj
@@ -76,4 +76,6 @@
(.write ^Writer (get-field this :base) s))
Integer
+ (c-write-char this x)
+ Long
(c-write-char this x))))))))
diff --git a/src/clj/clojure/pprint/pretty_writer.clj b/src/clj/clojure/pprint/pretty_writer.clj
index f3fd4dbf..438a9cb5 100644
--- a/src/clj/clojure/pprint/pretty_writer.clj
+++ b/src/clj/clojure/pprint/pretty_writer.clj
@@ -399,6 +399,8 @@
(add-to-buffer this (make-buffer-blob s white-space oldpos newpos))))))
Integer
+ (p-write-char this x)
+ Long
(p-write-char this x))))
(flush []
diff --git a/src/jvm/clojure/lang/Compiler.java b/src/jvm/clojure/lang/Compiler.java
index cccd253e..1c6bfdc1 100644
--- a/src/jvm/clojure/lang/Compiler.java
+++ b/src/jvm/clojure/lang/Compiler.java
@@ -727,7 +727,10 @@ static public abstract class HostExpr implements Expr, MaybePrimitiveExpr{
else
{
if(returnType == int.class)
- gen.invokeStatic(INTEGER_TYPE, intValueOfMethod);
+ {
+ gen.visitInsn(I2L);
+ gen.invokeStatic(NUMBERS_TYPE, Method.getMethod("Number num(long)"));
+ }
else if(returnType == float.class)
{
gen.visitInsn(F2D);
diff --git a/src/jvm/clojure/lang/Numbers.java b/src/jvm/clojure/lang/Numbers.java
index f20530a0..42dc9611 100644
--- a/src/jvm/clojure/lang/Numbers.java
+++ b/src/jvm/clojure/lang/Numbers.java
@@ -319,24 +319,21 @@ static public Number rationalize(Number x){
return x;
}
-static Number box(int val){
- return Integer.valueOf(val);
-}
-
-static Number box(long val){
- if(val >= Integer.MIN_VALUE && val <= Integer.MAX_VALUE)
- return Integer.valueOf((int) val);
- else
- return Long.valueOf(val);
-}
-
-static Double box(double val){
- return Double.valueOf(val);
-}
+//static Number box(int val){
+// return Integer.valueOf(val);
+//}
-static Double box(float val){
- return Double.valueOf((double) val);
-}
+//static Number box(long val){
+// return Long.valueOf(val);
+//}
+//
+//static Double box(double val){
+// return Double.valueOf(val);
+//}
+//
+//static Double box(float val){
+// return Double.valueOf((double) val);
+//}
static public Number reduceBigInteger(BigInteger val){
int bitLength = val.bitLength();
@@ -344,7 +341,7 @@ static public Number reduceBigInteger(BigInteger val){
// return val.intValue();
// else
if(bitLength < 64)
- return box(val.longValue());
+ return num(val.longValue());
else
return val;
}
@@ -476,7 +473,7 @@ final static class LongOps implements Ops{
}
final public Number add(Number x, Number y){
- return box(Numbers.add(x.longValue(),y.longValue()));
+ return num(Numbers.add(x.longValue(),y.longValue()));
}
final public Number addP(Number x, Number y){
@@ -484,11 +481,11 @@ final static class LongOps implements Ops{
long ret = lx + ly;
if ((ret ^ lx) < 0 && (ret ^ ly) < 0)
return BIGINTEGER_OPS.add(x, y);
- return box(ret);
+ return num(ret);
}
final public Number multiply(Number x, Number y){
- return box(Numbers.multiply(x.longValue(), y.longValue()));
+ return num(Numbers.multiply(x.longValue(), y.longValue()));
}
final public Number multiplyP(Number x, Number y){
@@ -496,7 +493,7 @@ final static class LongOps implements Ops{
long ret = lx * ly;
if (ly != 0 && ret/ly != lx)
return BIGINTEGER_OPS.multiply(x, y);
- return box(ret);
+ return num(ret);
}
static long gcd(long u, long v){
while(v != 0)
@@ -513,12 +510,12 @@ final static class LongOps implements Ops{
long val = y.longValue();
long gcd = gcd(n, val);
if(gcd == 0)
- return Integer.valueOf(0);
+ return num(0);
n = n / gcd;
long d = val / gcd;
if(d == 1)
- return box(n);
+ return num(n);
if(d < 0)
{
n = -n;
@@ -528,11 +525,11 @@ final static class LongOps implements Ops{
}
public Number quotient(Number x, Number y){
- return box(x.longValue() / y.longValue());
+ return num(x.longValue() / y.longValue());
}
public Number remainder(Number x, Number y){
- return box(x.longValue() % y.longValue());
+ return num(x.longValue() % y.longValue());
}
public boolean equiv(Number x, Number y){
@@ -546,36 +543,36 @@ final static class LongOps implements Ops{
//public Number subtract(Number x, Number y);
final public Number negate(Number x){
long val = x.longValue();
- return box(Numbers.minus(val));
+ return num(Numbers.minus(val));
}
final public Number negateP(Number x){
long val = x.longValue();
if(val > Long.MIN_VALUE)
- return box(-val);
+ return num(-val);
return BigInteger.valueOf(val).negate();
}
public Number inc(Number x){
long val = x.longValue();
- return box(Numbers.inc(val));
+ return num(Numbers.inc(val));
}
public Number incP(Number x){
long val = x.longValue();
if(val < Long.MAX_VALUE)
- return box(val + 1);
+ return num(val + 1);
return BIGINTEGER_OPS.inc(x);
}
public Number dec(Number x){
long val = x.longValue();
- return box(Numbers.dec(val));
+ return num(Numbers.dec(val));
}
public Number decP(Number x){
long val = x.longValue();
if(val > Long.MIN_VALUE)
- return box(val - 1);
+ return num(val - 1);
return BIGINTEGER_OPS.dec(x);
}
}
@@ -986,42 +983,42 @@ final static class LongBitOps implements BitOps{
}
public Number not(Number x){
- return box(~x.longValue());
+ return num(~x.longValue());
}
public Number and(Number x, Number y){
- return box(x.longValue() & y.longValue());
+ return num(x.longValue() & y.longValue());
}
public Number or(Number x, Number y){
- return box(x.longValue() | y.longValue());
+ return num(x.longValue() | y.longValue());
}
public Number xor(Number x, Number y){
- return box(x.longValue() ^ y.longValue());
+ return num(x.longValue() ^ y.longValue());
}
public Number andNot(Number x, Number y){
- return box(x.longValue() & ~y.longValue());
+ return num(x.longValue() & ~y.longValue());
}
public Number clearBit(Number x, int n){
if(n < 63)
- return (box(x.longValue() & ~(1L << n)));
+ return (num(x.longValue() & ~(1L << n)));
else
return toBigInteger(x).clearBit(n);
}
public Number setBit(Number x, int n){
if(n < 63)
- return box(x.longValue() | (1L << n));
+ return num(x.longValue() | (1L << n));
else
return toBigInteger(x).setBit(n);
}
public Number flipBit(Number x, int n){
if(n < 63)
- return box(x.longValue() ^ (1L << n));
+ return num(x.longValue() ^ (1L << n));
else
return toBigInteger(x).flipBit(n);
}
@@ -1036,13 +1033,13 @@ final static class LongBitOps implements BitOps{
public Number shiftLeft(Number x, int n){
if(n < 0)
return shiftRight(x, -n);
- return box(Numbers.shiftLeft(x.longValue(), n));
+ return num(Numbers.shiftLeft(x.longValue(), n));
}
public Number shiftRight(Number x, int n){
if(n < 0)
return shiftLeft(x, -n);
- return box(x.longValue() >> n);
+ return num(x.longValue() >> n);
}
}
@@ -1577,9 +1574,9 @@ static int throwIntOverflow(){
throw new ArithmeticException("integer overflow");
}
-static public Number num(int x){
- return Integer.valueOf(x);
-}
+//static public Number num(int x){
+// return Integer.valueOf(x);
+//}
static public int unchecked_int_add(int x, int y){
return x + y;
@@ -1716,7 +1713,7 @@ static public int unchecked_int_remainder(int x, int y){
//}
static public Number num(long x){
- return box(x);
+ return Long.valueOf(x);
}
static public long unchecked_long_add(long x, long y){
@@ -1754,7 +1751,7 @@ static public Number addP(long x, long y){
long ret = x + y;
if ((ret ^ x) < 0 && (ret ^ y) < 0)
return addP((Number)x,(Number)y);
- return box(ret);
+ return num(ret);
}
static public long minus(long x, long y){
@@ -1768,7 +1765,7 @@ static public Number minusP(long x, long y){
long ret = x - y;
if (((ret ^ x) < 0 && (ret ^ ~y) < 0))
return minusP((Number)x,(Number)y);
- return box(ret);
+ return num(ret);
}
static public long minus(long x){
@@ -1780,7 +1777,7 @@ static public long minus(long x){
static public Number minusP(long x){
if(x == Long.MIN_VALUE)
return BigInteger.valueOf(x).negate();
- return box(-x);
+ return num(-x);
}
static public long inc(long x){
@@ -1792,7 +1789,7 @@ static public long inc(long x){
static public Number incP(long x){
if(x == Long.MAX_VALUE)
return BIGINTEGER_OPS.inc(x);
- return box(x + 1);
+ return num(x + 1);
}
static public long dec(long x){
@@ -1804,7 +1801,7 @@ static public long dec(long x){
static public Number decP(long x){
if(x == Long.MIN_VALUE)
return BIGINTEGER_OPS.dec(x);
- return box(x - 1);
+ return num(x - 1);
}
@@ -1819,7 +1816,7 @@ static public Number multiplyP(long x, long y){
long ret = x * y;
if (y != 0 && ret/y != x)
return multiplyP((Number)x,(Number)y);
- return box(ret);
+ return num(ret);
}
static public long unchecked_long_divide(long x, long y){
diff --git a/src/jvm/clojure/lang/Reflector.java b/src/jvm/clojure/lang/Reflector.java
index d5e7fa7f..312a0a14 100644
--- a/src/jvm/clojure/lang/Reflector.java
+++ b/src/jvm/clojure/lang/Reflector.java
@@ -406,7 +406,8 @@ static public boolean paramArgTypeMatch(Class paramType, Class argType){
return true;
if(paramType == int.class)
return argType == Integer.class
- || argType == long.class;// || argType == FixNum.class;
+ || argType == long.class
+ || argType == Long.class;// || argType == FixNum.class;
else if(paramType == float.class)
return argType == Float.class
|| argType == double.class;
@@ -450,12 +451,9 @@ public static Object prepRet(Object x){
// return ((Boolean) x).booleanValue() ? RT.T : null;
if(x instanceof Boolean)
return ((Boolean) x)?Boolean.TRUE:Boolean.FALSE;
- else if(x instanceof Long)
+ else if(x instanceof Integer)
{
- long val = ((Long)x).longValue();
- if(val >= Integer.MIN_VALUE && val <= Integer.MAX_VALUE)
- return Integer.valueOf((int) val);
- return x;
+ return ((Integer)x).longValue();
}
else if(x instanceof Float)
return Double.valueOf(((Float) x).doubleValue());