From 838c4bcf8addb80cad66299c7a0d871f55ad7b01 Mon Sep 17 00:00:00 2001 From: panzi Date: Wed, 15 Aug 2007 17:03:40 +0000 Subject: [PATCH] * src/native/vm/java_lang_Class.c [WITH_CLASSPATH_GNU] [ENABLE_ANNOTATIONS] (vm/vm.h): Added include. * src/native/vm/gnu/sun_reflect_ConstantPool.c (vm/stringlocal.h): Added include. (Java_sun_reflect_ConstantPool_getClassAtIfLoaded0): Removed wrong call of the macro TRACEJVMCALLS. * src/native/vm/gnu/java_lang_reflect_Method.c (Java_java_lang_reflect_Method_getDefaultValue): Added proper casts so gcc don't give me warnings. * src/native/vm/gnu/java_lang_reflect_Constructor.c [ENABLE_ANNOTATIONS] (vm/exceptions.h): Added include. * src/native/vm/sun/jvm.c (JVM_ConstantPoolGetStringAt): Corrected cast. (JVM_ConstantPoolGetUTF8At): Corrected cast. (JVM_GetArrayElement): Using primitive_box_* functions. --- .../vm/gnu/java_lang_reflect_Constructor.c | 3 +- src/native/vm/gnu/java_lang_reflect_Method.c | 6 +- src/native/vm/gnu/sun_reflect_ConstantPool.c | 3 +- src/native/vm/java_lang_Class.c | 19 +++--- src/native/vm/sun/jvm.c | 65 +++++++------------ 5 files changed, 38 insertions(+), 58 deletions(-) diff --git a/src/native/vm/gnu/java_lang_reflect_Constructor.c b/src/native/vm/gnu/java_lang_reflect_Constructor.c index 084a0cce3..98d57ba81 100644 --- a/src/native/vm/gnu/java_lang_reflect_Constructor.c +++ b/src/native/vm/gnu/java_lang_reflect_Constructor.c @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: java_lang_reflect_Constructor.c 8305 2007-08-15 13:49:26Z panzi $ + $Id: java_lang_reflect_Constructor.c 8311 2007-08-15 17:03:40Z panzi $ */ @@ -34,6 +34,7 @@ #if defined(ENABLE_ANNOTATIONS) #include "vm/vm.h" +#include "vm/exceptions.h" #endif #include "vm/types.h" diff --git a/src/native/vm/gnu/java_lang_reflect_Method.c b/src/native/vm/gnu/java_lang_reflect_Method.c index b5c9f5898..e105ea1a0 100644 --- a/src/native/vm/gnu/java_lang_reflect_Method.c +++ b/src/native/vm/gnu/java_lang_reflect_Method.c @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: java_lang_reflect_Method.c 8305 2007-08-15 13:49:26Z panzi $ + $Id: java_lang_reflect_Method.c 8311 2007-08-15 17:03:40Z panzi $ */ @@ -232,7 +232,7 @@ JNIEXPORT struct java_lang_Object* JNICALL Java_java_lang_reflect_Method_getDefa utf *utf_desc = NULL; sun_reflect_ConstantPool *constantPool = NULL; java_handle_t *o = (java_handle_t*)this; - java_lang_Object *constantPoolOop = NULL; + java_lang_Class *constantPoolOop = NULL; if (this == NULL) { exceptions_throw_nullpointerexception(); @@ -249,7 +249,7 @@ JNIEXPORT struct java_lang_Object* JNICALL Java_java_lang_reflect_Method_getDefa } LLNI_field_get_ref(this, clazz, constantPoolOop); - LLNI_field_set_ref(constantPool, constantPoolOop, constantPoolOop); + LLNI_field_set_ref(constantPool, constantPoolOop, (java_lang_Object*)constantPoolOop); /* only resolve the method the first time */ if (m_parseAnnotationDefault == NULL) { diff --git a/src/native/vm/gnu/sun_reflect_ConstantPool.c b/src/native/vm/gnu/sun_reflect_ConstantPool.c index 1aa693315..b104710e2 100644 --- a/src/native/vm/gnu/sun_reflect_ConstantPool.c +++ b/src/native/vm/gnu/sun_reflect_ConstantPool.c @@ -50,6 +50,7 @@ #include "vm/vm.h" #include "vm/resolve.h" +#include "vm/stringlocal.h" #include "vmcore/class.h" #include "vmcore/utf8.h" @@ -129,8 +130,6 @@ JNIEXPORT struct java_lang_Class* JNICALL Java_sun_reflect_ConstantPool_getClass classinfo *c = NULL; classinfo *cls = (classinfo*)jcpool; - TRACEJVMCALLS("JVM_ConstantPoolGetClassAtIfLoaded: cls=%p, index=%d", cls, index); - ref = (constant_classref*)class_getconstant( cls, index, CONSTANT_Class); diff --git a/src/native/vm/java_lang_Class.c b/src/native/vm/java_lang_Class.c index 61d736307..e9cf29d42 100644 --- a/src/native/vm/java_lang_Class.c +++ b/src/native/vm/java_lang_Class.c @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: java_lang_Class.c 8309 2007-08-15 16:42:52Z twisti $ + $Id: java_lang_Class.c 8311 2007-08-15 17:03:40Z panzi $ */ @@ -82,6 +82,7 @@ #include "vmcore/loader.h" #if defined(WITH_CLASSPATH_GNU) && defined(ENABLE_ANNOTATIONS) +#include "vm/vm.h" #include "vmcore/annotation.h" #include "native/include/sun_reflect_ConstantPool.h" #endif @@ -647,14 +648,14 @@ void _Jv_java_lang_Class_throwException(java_lang_Throwable *t) */ java_objectarray *_Jv_java_lang_Class_getDeclaredAnnotations(java_lang_Class* klass) { - classinfo *c = (classinfo*)klass; + classinfo *c = (classinfo*)klass; static methodinfo *m_parseAnnotationsIntoArray = NULL; utf *utf_parseAnnotationsIntoArray = NULL; - utf *utf_desc = NULL; - java_bytearray *annotations = NULL; - sun_reflect_ConstantPool *constantPool = NULL; - uint32_t size = 0; - java_lang_Object *o = (java_lang_Object*)klass; + utf *utf_desc = NULL; + java_bytearray *annotations = NULL; + sun_reflect_ConstantPool *constantPool = NULL; + uint32_t size = 0; + java_lang_Object *constantPoolOop = (java_lang_Object*)klass; if (c == NULL) { exceptions_throw_nullpointerexception(); @@ -684,7 +685,7 @@ java_objectarray *_Jv_java_lang_Class_getDeclaredAnnotations(java_lang_Class* kl return NULL; } - LLNI_field_set_ref(constantPool, constantPoolOop, o); + LLNI_field_set_ref(constantPool, constantPoolOop, constantPoolOop); /* only resolve the method the first time */ if (m_parseAnnotationsIntoArray == NULL) { @@ -711,7 +712,7 @@ java_objectarray *_Jv_java_lang_Class_getDeclaredAnnotations(java_lang_Class* kl } } - return vm_call_method( + return (java_objectarray*)vm_call_method( m_parseAnnotationsIntoArray, NULL, annotations, constantPool, klass); } diff --git a/src/native/vm/sun/jvm.c b/src/native/vm/sun/jvm.c index 330c3de0c..a70044cee 100644 --- a/src/native/vm/sun/jvm.c +++ b/src/native/vm/sun/jvm.c @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: jvm.c 8310 2007-08-15 16:49:03Z twisti $ + $Id: jvm.c 8311 2007-08-15 17:03:40Z panzi $ */ @@ -1463,7 +1463,7 @@ jstring JVM_ConstantPoolGetStringAt(JNIEnv *env, jobject unused, jobject jcpool, } /* XXX: I hope literalstring_new is the right Function. */ - return (java_lang_String*)literalstring_new(ref); + return (jstring)literalstring_new(ref); } @@ -1483,7 +1483,7 @@ jstring JVM_ConstantPoolGetUTF8At(JNIEnv *env, jobject unused, jobject jcpool, j } /* XXX: I hope literalstring_new is the right Function. */ - return (java_lang_String*)literalstring_new(ref); + return (jstring)literalstring_new(ref); } @@ -2192,8 +2192,8 @@ jobject JVM_GetArrayElement(JNIEnv *env, jobject arr, jint index) { /* log_println("JVM_GetArrayElement: IMPLEMENT ME!"); */ - java_arrayheader *a; - java_handle_t *o = NULL; + java_arrayheader *a = NULL; + int32_t elementtype = 0; TRACEJVMCALLS("JVM_GetArrayElement: arr=%p, index=%d", arr, index); @@ -2209,58 +2209,37 @@ jobject JVM_GetArrayElement(JNIEnv *env, jobject arr, jint index) return NULL; } - if (index < 0 || index > a->size ) { + if (index < 0 || index > a->size) { exceptions_new_arrayindexoutofboundsexception(index); return NULL; } - switch (a->objheader.vftbl->arraydesc->arraytype) { + elementtype = a->objheader.vftbl->arraydesc->elementtype; + + switch (elementtype) { case ARRAYTYPE_INT: - o = builtin_new(class_java_lang_Integer); - if (o != NULL) - ((java_lang_Integer*)o)->value = ((java_intarray*)a)->data[index]; - break; + return (jobject)primitive_box_int(((java_intarray*)a)->data[index]); case ARRAYTYPE_LONG: - o = builtin_new(class_java_lang_Long); - if (o != NULL) - ((java_lang_Long*)o)->value = ((java_longarray*)a)->data[index]; - break; + return (jobject)primitive_box_long(((java_longarray*)a)->data[index]); case ARRAYTYPE_FLOAT: - o = builtin_new(class_java_lang_Float); - if (o != NULL) - ((java_lang_Float*)o)->value = ((java_floatarray*)a)->data[index]; - break; + return (jobject)primitive_box_float(((java_floatarray*)a)->data[index]); case ARRAYTYPE_DOUBLE: - o = builtin_new(class_java_lang_Double); - if (o != NULL) - ((java_lang_Double*)o)->value = ((java_doublearray*)a)->data[index]; - break; + return (jobject)primitive_box_double(((java_doublearray*)a)->data[index]); case ARRAYTYPE_BYTE: - o = builtin_new(class_java_lang_Byte); - if (o != NULL) - ((java_lang_Byte*)o)->value = ((java_bytearray*)a)->data[index]; - break; + return (jobject)primitive_box_byte(((java_bytearray*)a)->data[index]); case ARRAYTYPE_CHAR: - o = builtin_new(class_java_lang_Character); - if (o != NULL) - ((java_lang_Character*)o)->value = ((java_chararray*)a)->data[index]; - break; + return (jobject)primitive_box_char(((java_chararray*)a)->data[index]); case ARRAYTYPE_SHORT: - o = builtin_new(class_java_lang_Short); - if (o != NULL) - ((java_lang_Short*)o)->value = ((java_shortarray*)a)->data[index]; - break; + return (jobject)primitive_box_short(((java_shortarray*)a)->data[index]); case ARRAYTYPE_BOOLEAN: - o = builtin_new(class_java_lang_Boolean); - if (o != NULL) - ((java_lang_Boolean*)o)->value = ((java_booleanarray*)a)->data[index]; - break; + return (jobject)primitive_box_boolean(((java_booleanarray*)a)->data[index]); case ARRAYTYPE_OBJECT: - o = ((java_objectarray*)a)->data[index]; - break; + return (jobject)((java_objectarray*)a)->data[index]; + default: + /* invalid element type */ + exceptions_throw_internalerror("invalid element type code in array descriptor: %d", elementtype); + return (jobject)NULL; } - - return (jobject)o; } -- 2.25.1