Hi,

I tried to run make check with javac 1.3.1 and it failed on SortTest.java. It 
turned out that javac was using jdk's classes and generating code to call 
Integer.compareTo(Integer). That method is not implemented yet, so kaffe 
complained.

It is an interoperability issue. In Klasses.jar, only 
Integer.compareTo(Object) exists, thus all virtual calls go there. In jdk 
1.2+, there is a compareTo(own type) method. The compiler generates calls to 
the own type version, if it can.

This patch adds the compareTo(own type) method to sub classes of 
java.lang.Number, and adapts the compareTo(Object) method to call it.

have fun,

dalibor topic
        * libraries/javalib/java/lang/Byte.java,
        libraries/javalib/java/lang/Character.java,
        libraries/javalib/java/lang/Double.java,
        libraries/javalib/java/lang/Float.java,
        libraries/javalib/java/lang/Integer.java,
        libraries/javalib/java/lang/Long.java,
        libraries/javalib/java/lang/Short.java:
        added compareTo methods to compare with same type.
diff -ur kaffe/libraries/javalib/java/lang/Byte.java patched-kaffe/libraries/javalib/java/lang/Byte.java
--- kaffe/libraries/javalib/java/lang/Byte.java	Thu Jul  8 20:05:24 1999
+++ patched-kaffe/libraries/javalib/java/lang/Byte.java	Wed Mar 20 14:22:19 2002
@@ -93,8 +93,11 @@
 	return (new Byte(parseByte(s, radix)));
 }
 
-public int compareTo(Object o) {
-	return (int)value - (int)((Byte)o).value;
+public int compareTo(Byte b) {
+	return (int)value - (int)b.value;
 }
 
+public int compareTo(Object o) {
+	return compareTo((Byte) o);
+}
 }
diff -ur kaffe/libraries/javalib/java/lang/Character.java patched-kaffe/libraries/javalib/java/lang/Character.java
--- kaffe/libraries/javalib/java/lang/Character.java	Sat Sep 18 01:09:52 1999
+++ patched-kaffe/libraries/javalib/java/lang/Character.java	Wed Mar 20 14:22:36 2002
@@ -84,9 +84,14 @@
     return (String.valueOf(value));
   }
 
+  public int compareTo(Character c)
+  {
+    return (int)value - (int)c.value;
+  }
+
   public int compareTo(Object o)
   {
-    return (int)value - (int)((Character)o).value;
+    return compareTo((Character)o);
   }
 
   /**
diff -ur kaffe/libraries/javalib/java/lang/Double.java patched-kaffe/libraries/javalib/java/lang/Double.java
--- kaffe/libraries/javalib/java/lang/Double.java	Mon Dec  3 13:11:41 2001
+++ patched-kaffe/libraries/javalib/java/lang/Double.java	Wed Mar 20 14:04:10 2002
@@ -59,11 +59,15 @@
     return value;
   }
 
-  public int compareTo(Object that) {
+  public int compareTo(Double that) {
     final long bits1 = doubleToLongBits(this.value);
-    final long bits2 = doubleToLongBits(((Double)that).value);
+    final long bits2 = doubleToLongBits(that.value);
 
     return (bits1 < bits2) ? -1 : (bits1 == bits2) ? 0 : 1;
+  }
+
+  public int compareTo(Object that) {
+    return compareTo((Double) that);
   }
 
   public static String toString(double value) {
diff -ur kaffe/libraries/javalib/java/lang/Float.java patched-kaffe/libraries/javalib/java/lang/Float.java
--- kaffe/libraries/javalib/java/lang/Float.java	Mon Dec  3 13:11:41 2001
+++ patched-kaffe/libraries/javalib/java/lang/Float.java	Wed Mar 20 14:06:05 2002
@@ -52,11 +52,15 @@
       && floatToIntBits(value) == floatToIntBits(((Float)that).value));
   }
 
-  public int compareTo(Object that) {
+  public int compareTo(Float that) {
     final int bits1 = floatToIntBits(this.value);
-    final int bits2 = floatToIntBits(((Float)that).value);
+    final int bits2 = floatToIntBits(that.value);
 
     return (bits1 < bits2) ? -1 : (bits1 == bits2) ? 0 : 1;
+  }
+
+  public int compareTo(Object that) {
+    return compareTo((Float) that);
   }
 
   public int hashCode() {
diff -ur kaffe/libraries/javalib/java/lang/Integer.java patched-kaffe/libraries/javalib/java/lang/Integer.java
--- kaffe/libraries/javalib/java/lang/Integer.java	Sat Jul 24 02:56:26 1999
+++ patched-kaffe/libraries/javalib/java/lang/Integer.java	Wed Mar 20 14:19:38 2002
@@ -73,11 +73,15 @@
 		(((Integer)obj).value == this.value);
 }
 
-public int compareTo(Object o) {
+public int compareTo(Integer i) {
 	final int int1 = this.value;
-	final int int2 = ((Integer)o).value;
+	final int int2 = i.value;
 
 	return (int1 == int2) ? 0 : (int1 < int2) ? -1 : 1;
+}
+
+public int compareTo(Object o) {
+	return compareTo((Integer) o);
 }
 
 public float floatValue() {
diff -ur kaffe/libraries/javalib/java/lang/Long.java patched-kaffe/libraries/javalib/java/lang/Long.java
--- kaffe/libraries/javalib/java/lang/Long.java	Mon Mar 18 02:13:14 2002
+++ patched-kaffe/libraries/javalib/java/lang/Long.java	Wed Mar 20 14:21:00 2002
@@ -38,11 +38,15 @@
 		(((Long)obj).value == this.value);
 }
 
-public int compareTo(Object o) {
+public int compareTo(Long l) {
 	final long long1 = this.value;
-	final long long2 = ((Long)o).value;
+	final long long2 = l.value;
 
 	return (long1 == long2) ? 0 : (long1 < long2) ? -1 : 1;
+}
+
+public int compareTo(Object o) {
+	return compareTo((Long) o);
 }
 
 public float floatValue() {
diff -ur kaffe/libraries/javalib/java/lang/Short.java patched-kaffe/libraries/javalib/java/lang/Short.java
--- kaffe/libraries/javalib/java/lang/Short.java	Thu Jul  8 20:05:26 1999
+++ patched-kaffe/libraries/javalib/java/lang/Short.java	Wed Mar 20 14:22:08 2002
@@ -49,7 +49,11 @@
 }
 
 public int compareTo(Object o) {
-	return (int)value - (int)((Short)o).value;
+	return compareTo((Short) o);
+}
+
+public int compareTo(Short s) {
+	return (int)value - (int)s.value;
 }
 
 public float floatValue()

Reply via email to