PatchSet 5455 Date: 2004/11/14 13:52:03 Author: robilad Branch: HEAD Tag: (none) Log: Improved ArrayStoreException error message
2004-11-13 Mark Wielaard <[EMAIL PROTECTED]> * include/errors.h (ArrayStoreException): Define to take a message. * kaffe/kaffevm/soft.c (soft_checkarraystore): Add message to ArrayStoreException. * libraries/clib/native/System.c (java_lang_System_arraycopy): Likewise. Members: ChangeLog:1.3001->1.3002 include/errors.h:1.14->1.15 kaffe/kaffevm/soft.c:1.67->1.68 libraries/clib/native/System.c:1.59->1.60 Index: kaffe/ChangeLog diff -u kaffe/ChangeLog:1.3001 kaffe/ChangeLog:1.3002 --- kaffe/ChangeLog:1.3001 Sun Nov 14 01:10:07 2004 +++ kaffe/ChangeLog Sun Nov 14 13:52:03 2004 @@ -1,3 +1,12 @@ +2004-11-13 Mark Wielaard <[EMAIL PROTECTED]> + + * include/errors.h + (ArrayStoreException): Define to take a message. + * kaffe/kaffevm/soft.c + (soft_checkarraystore): Add message to ArrayStoreException. + * libraries/clib/native/System.c + (java_lang_System_arraycopy): Likewise. + 2004-11-13 Dalibor Topic <[EMAIL PROTECTED]> * libraries/javalib/javax/swing/plaf/basic/BasicTextUI.java, Index: kaffe/include/errors.h diff -u kaffe/include/errors.h:1.14 kaffe/include/errors.h:1.15 --- kaffe/include/errors.h:1.14 Sun Oct 31 14:35:32 2004 +++ kaffe/include/errors.h Sun Nov 14 13:52:05 2004 @@ -101,7 +101,7 @@ #define IllegalMonitorStateException NEW_LANG_EXCEPTION(IllegalMonitorStateException) #define NullPointerException NEW_LANG_EXCEPTION(NullPointerException) #define ArrayIndexOutOfBoundsException NEW_LANG_EXCEPTION(ArrayIndexOutOfBoundsException) -#define ArrayStoreException NEW_LANG_EXCEPTION(ArrayStoreException) +#define ArrayStoreException(M) NEW_LANG_EXCEPTION_MESSAGE(ArrayStoreException, M) #define ArithmeticException NEW_LANG_EXCEPTION(ArithmeticException) #define AbstractMethodError(M) NEW_LANG_EXCEPTION_MESSAGE(AbstractMethodError, M) #define ThreadDeath NEW_LANG_EXCEPTION(ThreadDeath) Index: kaffe/kaffe/kaffevm/soft.c diff -u kaffe/kaffe/kaffevm/soft.c:1.67 kaffe/kaffe/kaffevm/soft.c:1.68 --- kaffe/kaffe/kaffevm/soft.c:1.67 Sat Nov 6 20:02:07 2004 +++ kaffe/kaffe/kaffevm/soft.c Sun Nov 14 13:52:06 2004 @@ -584,7 +584,16 @@ soft_checkarraystore(Hjava_lang_Object* array, Hjava_lang_Object* obj) { if (obj != 0 && soft_instanceof(CLASS_ELEMENT_TYPE(OBJECT_CLASS(array)), obj) == 0) { - throwException(ArrayStoreException); + Hjava_lang_Throwable* asexc; + const char* f = "can't store `%s' in `%s'"; + const char *otype = CLASS_CNAME(OBJECT_CLASS(obj)); + const char *atype = CLASS_CNAME(OBJECT_CLASS(array)); + char *b; + b = checkPtr(KMALLOC(strlen(otype)+strlen(atype)+strlen(f))); + sprintf(b, f, otype, atype); + asexc = ArrayStoreException(b); + KFREE(b); + throwException(asexc); } } Index: kaffe/libraries/clib/native/System.c diff -u kaffe/libraries/clib/native/System.c:1.59 kaffe/libraries/clib/native/System.c:1.60 --- kaffe/libraries/clib/native/System.c:1.59 Thu Oct 14 11:12:10 2004 +++ kaffe/libraries/clib/native/System.c Sun Nov 14 13:52:06 2004 @@ -519,8 +519,28 @@ dclass = OBJECT_CLASS(dst); /* Must be arrays */ - if (!CLASS_IS_ARRAY(sclass) || !CLASS_IS_ARRAY(dclass)) { - throwException (ArrayStoreException); + if (!CLASS_IS_ARRAY(sclass)) { + Hjava_lang_Throwable* asexc; + const char* f = "source not an array `%s'"; + const char *type = CLASS_CNAME(sclass); + char *b; + b = checkPtr(KMALLOC(strlen(type)+strlen(f))); + sprintf(b, f, type); + asexc = ArrayStoreException(b); + KFREE(b); + throwException(asexc); + } + + if(!CLASS_IS_ARRAY(dclass)) { + Hjava_lang_Throwable* asexc; + const char* f = "destination not an array `%s'"; + const char *type = CLASS_CNAME(dclass); + char *b; + b = checkPtr(KMALLOC(strlen(type)+strlen(f))); + sprintf(b, f, type); + asexc = ArrayStoreException(b); + KFREE(b); + throwException(asexc); } /* Make sure we'll keep in the array boundaries */ @@ -567,13 +587,31 @@ #endif } else { if (CLASS_IS_PRIMITIVE(sclass) || CLASS_IS_PRIMITIVE(dclass)) { - throwException (ArrayStoreException); + Hjava_lang_Throwable* asexc; + const char* f = "incompatible array types `%s' and `%s'"; + const char *stype = CLASS_CNAME(sclass); + const char *dtype = CLASS_CNAME(dclass); + char *b; + b = checkPtr(KMALLOC(strlen(stype)+strlen(dtype)+strlen(f))); + sprintf(b, f, stype, dtype); + asexc = ArrayStoreException(b); + KFREE(b); + throwException(asexc); } for (; len > 0; len -= sizeof(Hjava_lang_Object*)) { Hjava_lang_Object* val = *(Hjava_lang_Object**)in; if (val != 0 && !instanceof(dclass, OBJECT_CLASS(val))) { - throwException (ArrayStoreException); + Hjava_lang_Throwable* asexc; + const char* f = "can't store `%s' in array of type `%s'"; + const char *vtype = CLASS_CNAME(OBJECT_CLASS(val)); + const char *atype = CLASS_CNAME(dclass); + char *b; + b = checkPtr(KMALLOC(strlen(vtype)+strlen(atype)+strlen(f))); + sprintf(b, f, vtype, atype); + asexc = ArrayStoreException(b); + KFREE(b); + throwException(asexc); } *(Hjava_lang_Object**)out = val; in += sizeof(Hjava_lang_Object*); _______________________________________________ kaffe mailing list [EMAIL PROTECTED] http://kaffe.org/cgi-bin/mailman/listinfo/kaffe