summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRich Hickey <richhickey@gmail.com>2008-06-02 18:28:22 +0000
committerRich Hickey <richhickey@gmail.com>2008-06-02 18:28:22 +0000
commitb09988ee65939daca058c5f5430692f82b16b0c9 (patch)
treef2f95fef5fc5c0e7acd0a7e5166e19a033354d7c /src
parentbdc3823cc58c986c7dcd6e3c098f10b9709fdc5c (diff)
added overload resolution support
Diffstat (limited to 'src')
-rw-r--r--src/boot.clj16
-rw-r--r--src/jvm/clojure/lang/Numbers.java720
2 files changed, 728 insertions, 8 deletions
diff --git a/src/boot.clj b/src/boot.clj
index f7958b22..06aa9efd 100644
--- a/src/boot.clj
+++ b/src/boot.clj
@@ -472,7 +472,7 @@
:inline-arities #{2}}
([] 1)
([x] (cast Number x))
- ([#^Number x #^Number y] (. clojure.lang.Numbers (multiply x y)))
+ ([x y] (. clojure.lang.Numbers (multiply x y)))
([x y & more]
(reduce * (* x y) more)))
@@ -482,7 +482,7 @@
{:inline (fn [x y] `(. clojure.lang.Numbers (divide ~x ~y)))
:inline-arities #{2}}
([x] (/ 1 x))
- ([#^Number x #^Number y] (. clojure.lang.Numbers (divide x y)))
+ ([x y] (. clojure.lang.Numbers (divide x y)))
([x y & more]
(reduce / (/ x y) more)))
@@ -492,7 +492,7 @@
{:inline (fn [& args] `(. clojure.lang.Numbers (minus ~@args)))
:inline-arities #{1 2}}
([x] (. clojure.lang.Numbers (minus x)))
- ([#^Number x #^Number y] (. clojure.lang.Numbers (minus x y)))
+ ([x y] (. clojure.lang.Numbers (minus x y)))
([x y & more]
(reduce - (- x y) more)))
@@ -502,7 +502,7 @@
{:inline (fn [x y] `(. clojure.lang.Numbers (lt ~x ~y)))
:inline-arities #{2}}
([x] true)
- ([#^Number x #^Number y] (. clojure.lang.Numbers (lt x y)))
+ ([x y] (. clojure.lang.Numbers (lt x y)))
([x y & more]
(if (< x y)
(if (rest more)
@@ -516,7 +516,7 @@
{:inline (fn [x y] `(. clojure.lang.Numbers (lte ~x ~y)))
:inline-arities #{2}}
([x] true)
- ([#^Number x #^Number y] (. clojure.lang.Numbers (lte x y)))
+ ([x y] (. clojure.lang.Numbers (lte x y)))
([x y & more]
(if (<= x y)
(if (rest more)
@@ -530,7 +530,7 @@
{:inline (fn [x y] `(. clojure.lang.Numbers (gt ~x ~y)))
:inline-arities #{2}}
([x] true)
- ([#^Number x #^Number y] (. clojure.lang.Numbers (gt x y)))
+ ([x y] (. clojure.lang.Numbers (gt x y)))
([x y & more]
(if (> x y)
(if (rest more)
@@ -544,7 +544,7 @@
{:inline (fn [x y] `(. clojure.lang.Numbers (gte ~x ~y)))
:inline-arities #{2}}
([x] true)
- ([#^Number x #^Number y] (. clojure.lang.Numbers (gte x y)))
+ ([x y] (. clojure.lang.Numbers (gte x y)))
([x y & more]
(if (>= x y)
(if (rest more)
@@ -557,7 +557,7 @@
{:inline (fn [x y] `(. clojure.lang.Numbers (equiv ~x ~y)))
:inline-arities #{2}}
([x] true)
- ([#^Number x #^Number y] (. clojure.lang.Numbers (equiv x y)))
+ ([x y] (. clojure.lang.Numbers (equiv x y)))
([x y & more]
(if (== x y)
(if (rest more)
diff --git a/src/jvm/clojure/lang/Numbers.java b/src/jvm/clojure/lang/Numbers.java
index 4b673cae..5f56ab5f 100644
--- a/src/jvm/clojure/lang/Numbers.java
+++ b/src/jvm/clojure/lang/Numbers.java
@@ -1562,6 +1562,7 @@ static public int add(int x, int y){
return ret;
}
+
static public int minus(int x, int y){
int ret = x - y;
if ((ret ^ x) < 0 && (ret ^ -y) < 0)
@@ -3447,4 +3448,723 @@ static public class L{
}
*/
+
+
+//overload resolution
+
+static public Number add(int x, Object y){
+ return add((Object)x,y);
+}
+
+static public Number add(Object x, int y){
+ return add(x,(Object)y);
+}
+
+static public Number add(float x, Object y){
+ return add((Object)x,y);
+}
+
+static public Number add(Object x, float y){
+ return add(x,(Object)y);
+}
+
+static public Number add(long x, Object y){
+ return add((Object)x,y);
+}
+
+static public Number add(Object x, long y){
+ return add(x,(Object)y);
+}
+
+static public Number add(double x, Object y){
+ return add((Object)x,y);
+}
+
+static public Number add(Object x, double y){
+ return add(x,(Object)y);
+}
+
+static public Number minus(int x, Object y){
+ return minus((Object)x,y);
+}
+
+static public Number minus(Object x, int y){
+ return minus(x,(Object)y);
+}
+
+static public Number minus(float x, Object y){
+ return minus((Object)x,y);
+}
+
+static public Number minus(Object x, float y){
+ return minus(x,(Object)y);
+}
+
+static public Number minus(long x, Object y){
+ return minus((Object)x,y);
+}
+
+static public Number minus(Object x, long y){
+ return minus(x,(Object)y);
+}
+
+static public Number minus(double x, Object y){
+ return minus((Object)x,y);
+}
+
+static public Number minus(Object x, double y){
+ return minus(x,(Object)y);
+}
+
+static public Number multiply(int x, Object y){
+ return multiply((Object)x,y);
+}
+
+static public Number multiply(Object x, int y){
+ return multiply(x,(Object)y);
+}
+
+static public Number multiply(float x, Object y){
+ return multiply((Object)x,y);
+}
+
+static public Number multiply(Object x, float y){
+ return multiply(x,(Object)y);
+}
+
+static public Number multiply(long x, Object y){
+ return multiply((Object)x,y);
+}
+
+static public Number multiply(Object x, long y){
+ return multiply(x,(Object)y);
+}
+
+static public Number multiply(double x, Object y){
+ return multiply((Object)x,y);
+}
+
+static public Number multiply(Object x, double y){
+ return multiply(x,(Object)y);
+}
+
+static public Number divide(int x, Object y){
+ return divide((Object)x,y);
+}
+
+static public Number divide(Object x, int y){
+ return divide(x,(Object)y);
+}
+
+static public Number divide(float x, Object y){
+ return divide((Object)x,y);
+}
+
+static public Number divide(Object x, float y){
+ return divide(x,(Object)y);
+}
+
+static public Number divide(long x, Object y){
+ return divide((Object)x,y);
+}
+
+static public Number divide(Object x, long y){
+ return divide(x,(Object)y);
+}
+
+static public Number divide(double x, Object y){
+ return divide((Object)x,y);
+}
+
+static public Number divide(Object x, double y){
+ return divide(x,(Object)y);
+}
+
+static public boolean lt(int x, Object y){
+ return lt((Object)x,y);
+}
+
+static public boolean lt(Object x, int y){
+ return lt(x,(Object)y);
+}
+
+static public boolean lt(float x, Object y){
+ return lt((Object)x,y);
+}
+
+static public boolean lt(Object x, float y){
+ return lt(x,(Object)y);
+}
+
+static public boolean lt(long x, Object y){
+ return lt((Object)x,y);
+}
+
+static public boolean lt(Object x, long y){
+ return lt(x,(Object)y);
+}
+
+static public boolean lt(double x, Object y){
+ return lt((Object)x,y);
+}
+
+static public boolean lt(Object x, double y){
+ return lt(x,(Object)y);
+}
+
+static public boolean lte(int x, Object y){
+ return lte((Object)x,y);
+}
+
+static public boolean lte(Object x, int y){
+ return lte(x,(Object)y);
+}
+
+static public boolean lte(float x, Object y){
+ return lte((Object)x,y);
+}
+
+static public boolean lte(Object x, float y){
+ return lte(x,(Object)y);
+}
+
+static public boolean lte(long x, Object y){
+ return lte((Object)x,y);
+}
+
+static public boolean lte(Object x, long y){
+ return lte(x,(Object)y);
+}
+
+static public boolean lte(double x, Object y){
+ return lte((Object)x,y);
+}
+
+static public boolean lte(Object x, double y){
+ return lte(x,(Object)y);
+}
+
+static public boolean gt(int x, Object y){
+ return gt((Object)x,y);
+}
+
+static public boolean gt(Object x, int y){
+ return gt(x,(Object)y);
+}
+
+static public boolean gt(float x, Object y){
+ return gt((Object)x,y);
+}
+
+static public boolean gt(Object x, float y){
+ return gt(x,(Object)y);
+}
+
+static public boolean gt(long x, Object y){
+ return gt((Object)x,y);
+}
+
+static public boolean gt(Object x, long y){
+ return gt(x,(Object)y);
+}
+
+static public boolean gt(double x, Object y){
+ return gt((Object)x,y);
+}
+
+static public boolean gt(Object x, double y){
+ return gt(x,(Object)y);
+}
+
+static public boolean gte(int x, Object y){
+ return gte((Object)x,y);
+}
+
+static public boolean gte(Object x, int y){
+ return gte(x,(Object)y);
+}
+
+static public boolean gte(float x, Object y){
+ return gte((Object)x,y);
+}
+
+static public boolean gte(Object x, float y){
+ return gte(x,(Object)y);
+}
+
+static public boolean gte(long x, Object y){
+ return gte((Object)x,y);
+}
+
+static public boolean gte(Object x, long y){
+ return gte(x,(Object)y);
+}
+
+static public boolean gte(double x, Object y){
+ return gte((Object)x,y);
+}
+
+static public boolean gte(Object x, double y){
+ return gte(x,(Object)y);
+}
+
+
+static public boolean equiv(int x, Object y){
+ return equiv((Object)x,y);
+}
+
+static public boolean equiv(Object x, int y){
+ return equiv(x,(Object)y);
+}
+
+static public boolean equiv(float x, Object y){
+ return equiv((Object)x,y);
+}
+
+static public boolean equiv(Object x, float y){
+ return equiv(x,(Object)y);
+}
+
+static public boolean equiv(long x, Object y){
+ return equiv((Object)x,y);
+}
+
+static public boolean equiv(Object x, long y){
+ return equiv(x,(Object)y);
+}
+
+static public boolean equiv(double x, Object y){
+ return equiv((Object)x,y);
+}
+
+static public boolean equiv(Object x, double y){
+ return equiv(x,(Object)y);
+}
+
+
+static public float add(int x, float y){
+ return add((float)x,y);
+}
+
+static public float add(float x, int y){
+ return add(x,(float)y);
+}
+
+static public double add(int x, double y){
+ return add((double)x,y);
+}
+
+static public double add(double x, int y){
+ return add(x,(double)y);
+}
+
+static public long add(int x, long y){
+ return add((long)x,y);
+}
+
+static public long add(long x, int y){
+ return add(x,(long)y);
+}
+
+static public float add(long x, float y){
+ return add((float)x,y);
+}
+
+static public float add(float x, long y){
+ return add(x,(float)y);
+}
+
+static public double add(long x, double y){
+ return add((double)x,y);
+}
+
+static public double add(double x, long y){
+ return add(x,(double)y);
+}
+
+static public double add(float x, double y){
+ return add((double)x,y);
+}
+
+static public double add(double x, float y){
+ return add(x,(double)y);
+}
+
+static public float minus(int x, float y){
+ return minus((float)x,y);
+}
+
+static public float minus(float x, int y){
+ return minus(x,(float)y);
+}
+
+static public double minus(int x, double y){
+ return minus((double)x,y);
+}
+
+static public double minus(double x, int y){
+ return minus(x,(double)y);
+}
+
+static public long minus(int x, long y){
+ return minus((long)x,y);
+}
+
+static public long minus(long x, int y){
+ return minus(x,(long)y);
+}
+
+static public float minus(long x, float y){
+ return minus((float)x,y);
+}
+
+static public float minus(float x, long y){
+ return minus(x,(float)y);
+}
+
+static public double minus(long x, double y){
+ return minus((double)x,y);
+}
+
+static public double minus(double x, long y){
+ return minus(x,(double)y);
+}
+
+static public double minus(float x, double y){
+ return minus((double)x,y);
+}
+
+static public double minus(double x, float y){
+ return minus(x,(double)y);
+}
+
+static public float multiply(int x, float y){
+ return multiply((float)x,y);
+}
+
+static public float multiply(float x, int y){
+ return multiply(x,(float)y);
+}
+
+static public double multiply(int x, double y){
+ return multiply((double)x,y);
+}
+
+static public double multiply(double x, int y){
+ return multiply(x,(double)y);
+}
+
+static public long multiply(int x, long y){
+ return multiply((long)x,y);
+}
+
+static public long multiply(long x, int y){
+ return multiply(x,(long)y);
+}
+
+static public float multiply(long x, float y){
+ return multiply((float)x,y);
+}
+
+static public float multiply(float x, long y){
+ return multiply(x,(float)y);
+}
+
+static public double multiply(long x, double y){
+ return multiply((double)x,y);
+}
+
+static public double multiply(double x, long y){
+ return multiply(x,(double)y);
+}
+
+static public double multiply(float x, double y){
+ return multiply((double)x,y);
+}
+
+static public double multiply(double x, float y){
+ return multiply(x,(double)y);
+}
+
+static public float divide(int x, float y){
+ return divide((float)x,y);
+}
+
+static public float divide(float x, int y){
+ return divide(x,(float)y);
+}
+
+static public double divide(int x, double y){
+ return divide((double)x,y);
+}
+
+static public double divide(double x, int y){
+ return divide(x,(double)y);
+}
+
+static public float divide(long x, float y){
+ return divide((float)x,y);
+}
+
+static public float divide(float x, long y){
+ return divide(x,(float)y);
+}
+
+static public double divide(long x, double y){
+ return divide((double)x,y);
+}
+
+static public double divide(double x, long y){
+ return divide(x,(double)y);
+}
+
+static public double divide(float x, double y){
+ return divide((double)x,y);
+}
+
+static public double divide(double x, float y){
+ return divide(x,(double)y);
+}
+
+static public boolean lt(int x, float y){
+ return lt((float)x,y);
+}
+
+static public boolean lt(float x, int y){
+ return lt(x,(float)y);
+}
+
+static public boolean lt(int x, double y){
+ return lt((double)x,y);
+}
+
+static public boolean lt(double x, int y){
+ return lt(x,(double)y);
+}
+
+static public boolean lt(int x, long y){
+ return lt((long)x,y);
+}
+
+static public boolean lt(long x, int y){
+ return lt(x,(long)y);
+}
+
+static public boolean lt(long x, float y){
+ return lt((float)x,y);
+}
+
+static public boolean lt(float x, long y){
+ return lt(x,(float)y);
+}
+
+static public boolean lt(long x, double y){
+ return lt((double)x,y);
+}
+
+static public boolean lt(double x, long y){
+ return lt(x,(double)y);
+}
+
+static public boolean lt(float x, double y){
+ return lt((double)x,y);
+}
+
+static public boolean lt(double x, float y){
+ return lt(x,(double)y);
+}
+
+
+static public boolean lte(int x, float y){
+ return lte((float)x,y);
+}
+
+static public boolean lte(float x, int y){
+ return lte(x,(float)y);
+}
+
+static public boolean lte(int x, double y){
+ return lte((double)x,y);
+}
+
+static public boolean lte(double x, int y){
+ return lte(x,(double)y);
+}
+
+static public boolean lte(int x, long y){
+ return lte((long)x,y);
+}
+
+static public boolean lte(long x, int y){
+ return lte(x,(long)y);
+}
+
+static public boolean lte(long x, float y){
+ return lte((float)x,y);
+}
+
+static public boolean lte(float x, long y){
+ return lte(x,(float)y);
+}
+
+static public boolean lte(long x, double y){
+ return lte((double)x,y);
+}
+
+static public boolean lte(double x, long y){
+ return lte(x,(double)y);
+}
+
+static public boolean lte(float x, double y){
+ return lte((double)x,y);
+}
+
+static public boolean lte(double x, float y){
+ return lte(x,(double)y);
+}
+
+static public boolean gt(int x, float y){
+ return gt((float)x,y);
+}
+
+static public boolean gt(float x, int y){
+ return gt(x,(float)y);
+}
+
+static public boolean gt(int x, double y){
+ return gt((double)x,y);
+}
+
+static public boolean gt(double x, int y){
+ return gt(x,(double)y);
+}
+
+static public boolean gt(int x, long y){
+ return gt((long)x,y);
+}
+
+static public boolean gt(long x, int y){
+ return gt(x,(long)y);
+}
+
+static public boolean gt(long x, float y){
+ return gt((float)x,y);
+}
+
+static public boolean gt(float x, long y){
+ return gt(x,(float)y);
+}
+
+static public boolean gt(long x, double y){
+ return gt((double)x,y);
+}
+
+static public boolean gt(double x, long y){
+ return gt(x,(double)y);
+}
+
+static public boolean gt(float x, double y){
+ return gt((double)x,y);
+}
+
+static public boolean gt(double x, float y){
+ return gt(x,(double)y);
+}
+
+static public boolean gte(int x, float y){
+ return gte((float)x,y);
+}
+
+static public boolean gte(float x, int y){
+ return gte(x,(float)y);
+}
+
+static public boolean gte(int x, double y){
+ return gte((double)x,y);
+}
+
+static public boolean gte(double x, int y){
+ return gte(x,(double)y);
+}
+
+static public boolean gte(int x, long y){
+ return gte((long)x,y);
+}
+
+static public boolean gte(long x, int y){
+ return gte(x,(long)y);
+}
+
+static public boolean gte(long x, float y){
+ return gte((float)x,y);
+}
+
+static public boolean gte(float x, long y){
+ return gte(x,(float)y);
+}
+
+static public boolean gte(long x, double y){
+ return gte((double)x,y);
+}
+
+static public boolean gte(double x, long y){
+ return gte(x,(double)y);
+}
+
+static public boolean gte(float x, double y){
+ return gte((double)x,y);
+}
+
+static public boolean gte(double x, float y){
+ return gte(x,(double)y);
+}
+
+static public boolean equiv(int x, float y){
+ return equiv((float)x,y);
+}
+
+static public boolean equiv(float x, int y){
+ return equiv(x,(float)y);
+}
+
+static public boolean equiv(int x, double y){
+ return equiv((double)x,y);
+}
+
+static public boolean equiv(double x, int y){
+ return equiv(x,(double)y);
+}
+
+static public boolean equiv(int x, long y){
+ return equiv((long)x,y);
+}
+
+static public boolean equiv(long x, int y){
+ return equiv(x,(long)y);
+}
+
+static public boolean equiv(long x, float y){
+ return equiv((float)x,y);
+}
+
+static public boolean equiv(float x, long y){
+ return equiv(x,(float)y);
+}
+
+static public boolean equiv(long x, double y){
+ return equiv((double)x,y);
+}
+
+static public boolean equiv(double x, long y){
+ return equiv(x,(double)y);
+}
+
+static public boolean equiv(float x, double y){
+ return equiv((double)x,y);
+}
+
+static public boolean equiv(double x, float y){
+ return equiv(x,(double)y);
+}
+
}