Skip to content

Commit

Permalink
[jvm] call equals on functions in Reflect.compare
Browse files Browse the repository at this point in the history
  • Loading branch information
Simn committed Feb 8, 2024
1 parent 2b5c55e commit 2b0d343
Showing 1 changed file with 14 additions and 9 deletions.
23 changes: 14 additions & 9 deletions std/jvm/_std/Reflect.hx
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@
*/

import jvm.Jvm;

import java.lang.Number;
import java.lang.Long.LongClass;
import java.lang.Double.DoubleClass;
Expand Down Expand Up @@ -110,24 +109,24 @@ class Reflect {
return 1;
}
if (Jvm.instanceof(a, Number) && Jvm.instanceof(b, Number)) {
var a = (cast a:Number);
var b = (cast b:Number);
var a = (cast a : Number);
var b = (cast b : Number);
inline function isBig(v:Number)
return Jvm.instanceof(v, BigDecimal) || Jvm.instanceof(v, BigInteger);
inline function cmpLongTo(long:Number, another:Number) {
if(Jvm.instanceof(another, DoubleClass)) {
if (Jvm.instanceof(another, DoubleClass)) {
return new BigDecimal(long.longValue()).compareTo(new BigDecimal(another.doubleValue()));
} else if(Jvm.instanceof(another, FloatClass)) {
} else if (Jvm.instanceof(another, FloatClass)) {
return new BigDecimal(long.longValue()).compareTo(new BigDecimal(another.floatValue()));
} else {
return LongClass.compare(long.longValue(), another.longValue());
}
}
if(isBig(a) || isBig(b))
return new BigDecimal((cast a:java.lang.Object).toString()).compareTo((cast a:java.lang.Object).toString());
if(Jvm.instanceof(a, LongClass))
if (isBig(a) || isBig(b))
return new BigDecimal((cast a : java.lang.Object).toString()).compareTo((cast a : java.lang.Object).toString());
if (Jvm.instanceof(a, LongClass))
return cmpLongTo(a, b);
if(Jvm.instanceof(b, LongClass))
if (Jvm.instanceof(b, LongClass))
return -1 * cmpLongTo(b, a);
return DoubleClass.compare(a.doubleValue(), b.doubleValue());
}
Expand All @@ -137,6 +136,12 @@ class Reflect {
}
return (cast a : java.NativeString).compareTo(cast b);
}
if (Jvm.instanceof(a, jvm.Function)) {
if (!(cast a : jvm.Function).equals(cast b)) {
return -1;
}
return 0;
}
return -1;
}

Expand Down

0 comments on commit 2b0d343

Please sign in to comment.