* src/vm/utf8.c (utf_java_lang_ClassCastException): Added.
authortwisti <none@none>
Sat, 8 Jul 2006 20:16:05 +0000 (20:16 +0000)
committertwisti <none@none>
Sat, 8 Jul 2006 20:16:05 +0000 (20:16 +0000)
(utf8_init): Initialize utf_java_lang_ClassCastException.
* src/vm/utf8.h (utf_java_lang_ClassCastException): Added.

* src/vm/class.c (class_java_lang_ClassCastException): Added.
* src/vm/class.h (class_java_lang_ClassCastException): Likewise.

* src/vm/exceptions.c (exceptions_init): Initialize
class_java_lang_ClassCastException.

(new_classcastexception): Renamed to
exceptions_new_classcastexception, pass the failing class name to the
exception.

* src/vm/exceptions.h (exceptionptr): Use thread object directly.
(new_classcastexception): Renamed to
exceptions_new_classcastexception.

* src/vm/jit/stacktrace.c (stacktrace_inline_classcastexception):
Changed signature.
* src/vm/jit/stacktrace.h (stacktrace_inline_classcastexception):
Likewise.

* src/vm/jit/codegen-common.c (codegen_add_classcastexception_ref):
Likewise.
* src/vm/jit/codegen-common.h (codegen_add_classcastexception_ref):
Likewise.

* src/vm/jit/powerpc/codegen.c (codegen): Pass register number to
codegen_add_classcastexception_ref.

src/vm/class.c
src/vm/class.h
src/vm/exceptions.c
src/vm/exceptions.h
src/vm/jit/codegen-common.c
src/vm/jit/codegen-common.h
src/vm/jit/powerpc/codegen.c
src/vm/jit/stacktrace.c
src/vm/jit/stacktrace.h
src/vm/utf8.c
src/vm/utf8.h

index 81b5453479b8f1e961de3dd6e1e81c1ac6c35a4d..f85aa01fdd2b8016d7e8483233d3a55fd2aaa6a7 100644 (file)
@@ -31,7 +31,7 @@
             Christian Thalinger
                        Edwin Steiner
 
-   $Id: class.c 5053 2006-06-28 19:11:20Z twisti $
+   $Id: class.c 5088 2006-07-08 20:16:05Z twisti $
 
 */
 
@@ -113,6 +113,7 @@ classinfo *class_java_lang_NoSuchMethodError;
 classinfo *class_java_lang_OutOfMemoryError;
 
 classinfo *class_java_lang_Exception;
+classinfo *class_java_lang_ClassCastException;
 classinfo *class_java_lang_ClassNotFoundException;
 classinfo *class_java_lang_IllegalArgumentException;
 classinfo *class_java_lang_IllegalMonitorStateException;
index bcf21d05cb9afd014d45e2c44a0fe3730b0795b2..c5b4fafa21cee91ec7afb7226f8ed982ec4a5df3 100644 (file)
@@ -28,7 +28,7 @@
 
    Changes:
 
-   $Id: class.h 5053 2006-06-28 19:11:20Z twisti $
+   $Id: class.h 5088 2006-07-08 20:16:05Z twisti $
 
 */
 
@@ -180,6 +180,7 @@ extern classinfo *class_java_lang_NoSuchMethodError;
 extern classinfo *class_java_lang_OutOfMemoryError;
 
 extern classinfo *class_java_lang_Exception;
+extern classinfo *class_java_lang_ClassCastException;
 extern classinfo *class_java_lang_ClassNotFoundException;
 extern classinfo *class_java_lang_IllegalArgumentException;
 extern classinfo *class_java_lang_IllegalMonitorStateException;
index 765c4aae136dc1d3cea476882d430588eaf9e57f..d26a789e8354a34009f69d1607125c239095203e 100644 (file)
@@ -28,7 +28,7 @@
 
    Changes: Edwin Steiner
 
-   $Id: exceptions.c 5067 2006-07-03 10:18:56Z twisti $
+   $Id: exceptions.c 5088 2006-07-08 20:16:05Z twisti $
 
 */
 
@@ -140,6 +140,13 @@ bool exceptions_init(void)
                !link_class(class_java_lang_Exception))
                return false;
 
+       /* java/lang/ClassCastException */
+
+       if (!(class_java_lang_ClassCastException =
+                 load_class_bootstrap(utf_java_lang_ClassCastException)) ||
+               !link_class(class_java_lang_ClassCastException))
+               return false;
+
        /* java/lang/ClassNotFoundException */
 
        if (!(class_java_lang_ClassNotFoundException =
@@ -1223,19 +1230,25 @@ java_objectheader *new_arraystoreexception(void)
 }
 
 
-/* new_classcastexception ******************************************************
+/* exceptions_new_classcastexception *******************************************
 
-   generates a java.lang.ClassCastException for the jit compiler
+   Generates a java.lang.ClassCastException for the JIT compiler.
 
 *******************************************************************************/
 
-java_objectheader *new_classcastexception(void)
+java_objectheader *exceptions_new_classcastexception(java_objectheader *o)
 {
        java_objectheader *e;
+       utf               *classname;
+       java_lang_String  *s;
 
-       e = new_exception(string_java_lang_ClassCastException);
+       classname = o->vftbl->class->name;
 
-       if (!e)
+       s = javastring_new(classname);
+
+       e = native_new_and_init_string(class_java_lang_ClassCastException, s);
+
+       if (e == NULL)
                return *exceptionptr;
 
        return e;
index 10fd821e9eb43df2fe170365f180bd5e242f19d5..318b780825ae40939d0a1d8686d80d2cf693bae9 100644 (file)
@@ -28,7 +28,7 @@
 
    Changes: Edwin Steiner
 
-   $Id: exceptions.h 5067 2006-07-03 10:18:56Z twisti $
+   $Id: exceptions.h 5088 2006-07-08 20:16:05Z twisti $
 
 */
 
@@ -52,7 +52,7 @@ typedef struct exceptionentry exceptionentry;
 
 
 #if defined(ENABLE_THREADS)
-#define exceptionptr    builtin_get_exceptionptrptr()
+#define exceptionptr    &(THREADOBJECT->_exceptionptr)
 #else
 #define exceptionptr    &_no_threads_exceptionptr
 #endif
@@ -146,7 +146,7 @@ java_objectheader *new_arrayindexoutofboundsexception(s4 index);
 void exceptions_throw_arrayindexoutofboundsexception(void);
 
 java_objectheader *new_arraystoreexception(void);
-java_objectheader *new_classcastexception(void);
+java_objectheader *exceptions_new_classcastexception(java_objectheader *o);
 
 java_objectheader *new_illegalargumentexception(void);
 void exceptions_throw_illegalargumentexception(void);
index 00a1eb557b9fdd4bffef2545f8969740b7551866..273a4300ce410ca1a2e58be59288de97a8072432 100644 (file)
@@ -48,7 +48,7 @@
    memory. All functions writing values into the data area return the offset
    relative the begin of the code area (start of procedure).   
 
-   $Id: codegen-common.c 5071 2006-07-03 13:49:14Z twisti $
+   $Id: codegen-common.c 5088 2006-07-08 20:16:05Z twisti $
 
 */
 
@@ -396,9 +396,9 @@ void codegen_add_arraystoreexception_ref(codegendata *cd)
 
 *******************************************************************************/
 
-void codegen_add_classcastexception_ref(codegendata *cd)
+void codegen_add_classcastexception_ref(codegendata *cd, s4 reg)
 {
-       codegen_add_exception_ref(cd, -1, STACKTRACE_inline_classcastexception);
+       codegen_add_exception_ref(cd, reg, STACKTRACE_inline_classcastexception);
 }
 
 
index dbea5e19e62510e460fea00db7f0f7e627d136d5..4e21bc6d01d017fcaf92c59deff63db45535e8ab 100644 (file)
@@ -29,7 +29,7 @@
    Changes: Christian Ullrich
             Edwin Steiner
 
-   $Id: codegen-common.h 5071 2006-07-03 13:49:14Z twisti $
+   $Id: codegen-common.h 5088 2006-07-08 20:16:05Z twisti $
 
 */
 
@@ -165,7 +165,7 @@ void codegen_addreference(codegendata *cd, basicblock *target);
 void codegen_add_arithmeticexception_ref(codegendata *cd);
 void codegen_add_arrayindexoutofboundsexception_ref(codegendata *cd, s4 reg);
 void codegen_add_arraystoreexception_ref(codegendata *cd);
-void codegen_add_classcastexception_ref(codegendata *cd);
+void codegen_add_classcastexception_ref(codegendata *cd, s4 reg);
 void codegen_add_nullpointerexception_ref(codegendata *cd);
 void codegen_add_fillinstacktrace_ref(codegendata *cd);
 
index 60268dc15cda7ebec35a8ee4fd16a9d641d77780..83c5af4992e09fba4883558179071620e918e4c4 100644 (file)
@@ -31,7 +31,7 @@
             Christian Ullrich
             Edwin Steiner
 
-   $Id: codegen.c 5079 2006-07-06 11:36:01Z twisti $
+   $Id: codegen.c 5088 2006-07-08 20:16:05Z twisti $
 
 */
 
@@ -378,9 +378,10 @@ bool codegen(jitdata *jd)
                        replacementpoint++;
                }
 
+#if 0
                /* generate basicblock profiling code */
 
-               if (JITDATA_HAS_FLAG_INSTRUMENT(jd) && 0) {
+               if (JITDATA_HAS_FLAG_INSTRUMENT(jd)) {
                        /* count frequency */
 
                        disp = dseg_addaddress(cd, code->bbfrequency);
@@ -394,6 +395,7 @@ bool codegen(jitdata *jd)
 /*                     if (bptr->type == BBTYPE_EXH) */
 /*                             PROFILE_CYCLE_START; */
                }
+#endif
 
                /* copy interface registers to their destination */
 
@@ -3091,12 +3093,12 @@ gen_method:
 
                                /* interface checkcast code */
 
-                               if (!super || (super->flags & ACC_INTERFACE)) {
-                                       if (super) {
+                               if ((super == NULL) || (super->flags & ACC_INTERFACE)) {
+                                       if (super != NULL) {
                                                M_TST(s1);
                                                M_BEQ(s2);
-
-                                       else {
+                                       }
+                                       else {
                                                codegen_addpatchref(cd,
                                                                                        PATCHER_checkcast_instanceof_interface,
                                                                                        (constant_classref *) iptr->target,
@@ -3110,28 +3112,28 @@ gen_method:
                                        M_ILD(REG_ITMP3, REG_ITMP2, OFFSET(vftbl_t, interfacetablelength));
                                        M_LDATST(REG_ITMP3, REG_ITMP3, -superindex);
                                        M_BLE(0);
-                                       codegen_add_classcastexception_ref(cd);
+                                       codegen_add_classcastexception_ref(cd, s1);
                                        M_ALD(REG_ITMP3, REG_ITMP2,
                                                  OFFSET(vftbl_t, interfacetable[0]) -
                                                  superindex * sizeof(methodptr*));
                                        M_TST(REG_ITMP3);
                                        M_BEQ(0);
-                                       codegen_add_classcastexception_ref(cd);
+                                       codegen_add_classcastexception_ref(cd, s1);
 
-                                       if (!super)
+                                       if (super == NULL)
                                                M_BR(s3);
                                }
 
                                /* class checkcast code */
 
-                               if (!super || !(super->flags & ACC_INTERFACE)) {
+                               if ((super == NULL) || !(super->flags & ACC_INTERFACE)) {
                                        disp = dseg_addaddress(cd, supervftbl);
 
-                                       if (super) {
+                                       if (super != NULL) {
                                                M_TST(s1);
                                                M_BEQ(s3);
-
-                                       else {
+                                       }
+                                       else {
                                                codegen_addpatchref(cd, PATCHER_checkcast_class,
                                                                                        (constant_classref *) iptr->target,
                                                                                        disp);
@@ -3164,11 +3166,11 @@ gen_method:
                                        }
                                        M_CMPU(REG_ITMP3, REG_ITMP2);
                                        M_BGT(0);
-                                       codegen_add_classcastexception_ref(cd);
+                                       codegen_add_classcastexception_ref(cd, s1);
                                }
                                d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, s1);
-
-                       else {
+                       }
+                       else {
                                /* array type cast-check */
 
                                s1 = emit_load_s1(jd, iptr, src, rd->argintregs[0]);
@@ -3192,7 +3194,7 @@ gen_method:
                                M_JSR;
                                M_TST(REG_RESULT);
                                M_BEQ(0);
-                               codegen_add_classcastexception_ref(cd);
+                               codegen_add_classcastexception_ref(cd, s1);
 
                                s1 = emit_load_s1(jd, iptr, src, REG_ITMP1);
                                d = codegen_reg_of_var(rd, iptr->opc, iptr->dst, s1);
@@ -3485,9 +3487,8 @@ gen_method:
 
                        MCODECHECK(100);
 
-                       /* Check if the exception is an
-                          ArrayIndexOutOfBoundsException.  If so, move index register
-                          into REG_ITMP1. */
+                       /* Move the value register to a temporary register, if
+                          there is the need for it. */
 
                        if (eref->reg != -1)
                                M_MOV(eref->reg, REG_ITMP1);
@@ -3504,8 +3505,8 @@ gen_method:
                        if (savedmcodeptr != NULL) {
                                disp = ((u4 *) savedmcodeptr) - (((u4 *) cd->mcodeptr) + 1);
                                M_BR(disp);
-
-                       else {
+                       }
+                       else {
                                savedmcodeptr = cd->mcodeptr;
 
                                if (code->isleafmethod) {
index aaf44661df70d64d8ae0f43a933a664db97a252c..3505606e5a88c79d3627f0c64a8e1c1615e49887 100644 (file)
@@ -29,7 +29,7 @@
    Changes: Christian Thalinger
             Edwin Steiner
 
-   $Id: stacktrace.c 5085 2006-07-08 14:20:59Z twisti $
+   $Id: stacktrace.c 5088 2006-07-08 20:16:05Z twisti $
 
 */
 
@@ -436,10 +436,11 @@ java_objectheader *stacktrace_inline_arraystoreexception(u1 *pv, u1 *sp, u1 *ra,
 *******************************************************************************/
 
 java_objectheader *stacktrace_inline_classcastexception(u1 *pv, u1 *sp, u1 *ra,
-                                                                                                               u1 *xpc)
+                                                                                                               u1 *xpc,
+                                                                                                               java_objectheader *o)
 {
        stackframeinfo     sfi;
-       java_objectheader *o;
+       java_objectheader *e;
 
        /* create stackframeinfo */
 
@@ -447,13 +448,13 @@ java_objectheader *stacktrace_inline_classcastexception(u1 *pv, u1 *sp, u1 *ra,
 
        /* create exception */
 
-       o = new_classcastexception();
+       e = exceptions_new_classcastexception(o);
 
        /* remove stackframeinfo */
 
        stacktrace_remove_stackframeinfo(&sfi);
 
-       return o;
+       return e;
 }
 
 
index 1e83f69891837a0b9aad4330981e15614bf78179..31379a964ff9d393f724044b0f7a9a7dda8338fa 100644 (file)
@@ -28,7 +28,7 @@
 
    Changes:
 
-   $Id: stacktrace.h 4921 2006-05-15 14:24:36Z twisti $
+   $Id: stacktrace.h 5088 2006-07-08 20:16:05Z twisti $
 
 */
 
@@ -136,7 +136,8 @@ java_objectheader *stacktrace_inline_arraystoreexception(u1 *pv, u1 *sp, u1 *ra,
     (functionptr) stacktrace_inline_arraystoreexception
 
 java_objectheader *stacktrace_inline_classcastexception(u1 *pv, u1 *sp, u1 *ra,
-                                                                                                               u1 *xpc);
+                                                                                                               u1 *xpc,
+                                                                                                               java_objectheader *o);
 #define STACKTRACE_inline_classcastexception \
     (functionptr) stacktrace_inline_classcastexception
 
index dd9726a041c1cc039b1e2dc3b477e3f9b9ca094e..6b32835e1d264dc9867c7df6c92a8be1422c2916 100644 (file)
@@ -31,7 +31,7 @@
             Christian Thalinger
                        Edwin Steiner
 
-   $Id: utf8.c 5053 2006-06-28 19:11:20Z twisti $
+   $Id: utf8.c 5088 2006-07-08 20:16:05Z twisti $
 
 */
 
@@ -90,6 +90,7 @@ utf *utf_java_lang_NoSuchMethodError;
 utf *utf_java_lang_OutOfMemoryError;
 
 utf *utf_java_lang_Exception;
+utf *utf_java_lang_ClassCastException;
 utf *utf_java_lang_ClassNotFoundException;
 utf *utf_java_lang_IllegalArgumentException;
 utf *utf_java_lang_IllegalMonitorStateException;
@@ -221,6 +222,9 @@ bool utf8_init(void)
 
        utf_java_lang_Exception        = utf_new_char(string_java_lang_Exception);
 
+       utf_java_lang_ClassCastException =
+               utf_new_char(string_java_lang_ClassCastException);
+
        utf_java_lang_ClassNotFoundException =
                utf_new_char(string_java_lang_ClassNotFoundException);
 
index e42fd527b3ad9cede93922ea70300b6c9ed3bddd..391054a9c003d1353b926df96476dc7b1532b5db 100644 (file)
@@ -28,7 +28,7 @@
 
    Changes: Edwin Steiner
 
-   $Id: utf8.h 5053 2006-06-28 19:11:20Z twisti $
+   $Id: utf8.h 5088 2006-07-08 20:16:05Z twisti $
 
 */
 
@@ -84,6 +84,7 @@ extern utf *utf_java_lang_NoSuchMethodError;
 extern utf *utf_java_lang_OutOfMemoryError;
 
 extern utf *utf_java_lang_Exception;
+extern utf *utf_java_lang_ClassCastException;
 extern utf *utf_java_lang_ClassNotFoundException;
 extern utf *utf_java_lang_IllegalArgumentException;
 extern utf *utf_java_lang_IllegalMonitorStateException;