diff options
author | Rich Hickey <richhickey@gmail.com> | 2008-06-02 18:28:22 +0000 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2008-06-02 18:28:22 +0000 |
commit | b09988ee65939daca058c5f5430692f82b16b0c9 (patch) | |
tree | f2f95fef5fc5c0e7acd0a7e5166e19a033354d7c /src | |
parent | bdc3823cc58c986c7dcd6e3c098f10b9709fdc5c (diff) |
added overload resolution support
Diffstat (limited to 'src')
-rw-r--r-- | src/boot.clj | 16 | ||||
-rw-r--r-- | src/jvm/clojure/lang/Numbers.java | 720 |
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); +} + } |