No subject
Tue Jan 22 11:47:36 PST 2008
public static Double valueOf(String s) throws NumberFormatException
Returns a new Double object initialized to the value represented by the specified
string. The string s is interpreted as the representation of a floating-point value and a
Double object representing that value is created and returned.
If s is null, then a NullPointerException is thrown.
So, with this test case in hand I thought I would try my hand at hacking
the kaffe source to fix the problem. After some changes I got this output.
mo(/tmp/mo)% /soft/java/JDK-1.1.6/bin/java DoubleTest
java.lang.NullPointerException
at java.lang.Double.valueOf(Double.java)
at DoubleTest.main(DoubleTest.java:23)
mo(/tmp/mo)% kaffe DoubleTest
java.lang.NullPointerException
at java/lang/Throwable.<init>(31)
at java/lang/Exception.<init>(17)
at java/lang/RuntimeException.<init>(17)
at java/lang/NullPointerException.<init>(17)
at java/lang/Double.valueOf(103)
at DoubleTest.main(23)
So with my changes it seems to work correctly. I do not claim this
is a "good" patch but it should give you guys somewhere to start at
the very least.
diff -r -c copy_kaffe/libraries/clib/native/Double.c kaffe/libraries/clib/native/Double.c
*** copy_kaffe/libraries/clib/native/Double.c Wed Jan 6 02:11:39 1999
--- kaffe/libraries/clib/native/Double.c Wed Jan 6 02:29:07 1999
***************
*** 35,43 ****
}
/*
! * Convert string to double object.
*/
! double
java_lang_Double_valueOf0(struct Hjava_lang_String* str)
{
double value;
--- 35,43 ----
}
/*
! * Convert string into double object. (JDK 1.0.2)
*/
! struct Hjava_lang_Double*
java_lang_Double_valueOf0(struct Hjava_lang_String* str)
{
double value;
***************
*** 85,107 ****
value = atof(buf);
#endif
! return (value);
bail:;
SignalError("java.lang.NumberFormatException", msg);
! return (0);
}
- /*
- * Convert string into double class. (JDK 1.0.2)
- */
- struct Hjava_lang_Double*
- java_lang_Double_valueOf(struct Hjava_lang_String* str)
- {
- struct Hjava_lang_Double* obj;
- obj = (struct Hjava_lang_Double*)execute_java_constructor("java.lang.Double", 0, "(D)V", java_lang_Double_valueOf0(str));
- return (obj);
- }
/*
* Convert double to jlong.
--- 85,98 ----
value = atof(buf);
#endif
! return (struct Hjava_lang_Double*) execute_java_constructor("java.lang.Double", 0, "(
! D)V", value);
bail:;
SignalError("java.lang.NumberFormatException", msg);
! return NULL;
}
/*
* Convert double to jlong.
diff -r -c copy_kaffe/libraries/clib/native/Double.h kaffe/libraries/clib/native/Double.h
*** copy_kaffe/libraries/clib/native/Double.h Wed Jan 6 02:11:39 1999
--- kaffe/libraries/clib/native/Double.h Wed Jan 6 02:32:03 1999
***************
*** 21,27 ****
extern jlong java_lang_Double_doubleToLongBits(jdouble);
extern jdouble java_lang_Double_longBitsToDouble(jlong);
! extern jdouble java_lang_Double_valueOf0(struct Hjava_lang_String*);
#ifdef __cplusplus
}
--- 21,27 ----
extern jlong java_lang_Double_doubleToLongBits(jdouble);
extern jdouble java_lang_Double_longBitsToDouble(jlong);
! extern struct Hjava_lang_Double* java_lang_Double_valueOf0(struct Hjava_lang_String*);
#ifdef __cplusplus
}
diff -r -c copy_kaffe/libraries/javalib/java/lang/Double.java kaffe/libraries/javalib/java/lang/Double.java
*** copy_kaffe/libraries/javalib/java/lang/Double.java Wed Jan 6 02:11:44 1999
--- kaffe/libraries/javalib/java/lang/Double.java Wed Jan 6 02:48:08 1999
***************
*** 22,28 ****
private double value;
public static native String toString(double d);
! public static native Double valueOf(String s) throws NumberFormatException;
public static native long doubleToLongBits(double value);
public static native double longBitsToDouble(long bits);
--- 22,28 ----
private double value;
public static native String toString(double d);
! static native Double valueOf0(String s) throws NumberFormatException;
public static native long doubleToLongBits(double value);
public static native double longBitsToDouble(long bits);
***************
*** 44,50 ****
public boolean equals(Object obj) {
if ( (obj!=null) && (obj instanceof Double)) {
! Double that=(Double )obj;
if ((this.isNaN()==true) && (that.isNaN()==true)) return true;
double left, right;
--- 44,50 ----
public boolean equals(Object obj) {
if ( (obj!=null) && (obj instanceof Double)) {
! Double that=(Double) obj;
if ((this.isNaN()==true) && (that.isNaN()==true)) return true;
double left, right;
***************
*** 96,100 ****
--- 96,107 ----
public long longValue() {
return (long )value;
+ }
+
+ public static Double valueOf(String s) throws NumberFormatException {
+ if (s == null) {
+ throw new NullPointerException();
+ }
+ return valueOf0(s);
}
}
I hope that helps
mo dejong
dejong at cs.umn.edu
More information about the kaffe
mailing list