X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=src%2Fnative%2Fvm%2Fgnu%2Fjava_lang_reflect_Field.c;h=261fbfb03ff737c8b6424946c2bad3ebb82fe9ee;hb=9f859ad50d3d5d98c185d40b86b2179bc4dc9aeb;hp=67b95dfd01934e23372612c3f8b7c19ede21cbd4;hpb=9791edde39e923a3c4b61b4c895eda363782d487;p=cacao.git diff --git a/src/native/vm/gnu/java_lang_reflect_Field.c b/src/native/vm/gnu/java_lang_reflect_Field.c index 67b95dfd0..261fbfb03 100644 --- a/src/native/vm/gnu/java_lang_reflect_Field.c +++ b/src/native/vm/gnu/java_lang_reflect_Field.c @@ -22,8 +22,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: java_lang_reflect_Field.c 8291 2007-08-11 10:43:45Z twisti $ - */ @@ -177,7 +175,7 @@ static void *cacao_get_field_address(java_lang_reflect_Field *this, return NULL; } - if (builtin_instanceof((java_objectheader *) o, c)) + if (builtin_instanceof((java_handle_t *) o, c)) return (void *) (((intptr_t) o) + f->offset); } @@ -230,7 +228,7 @@ JNIEXPORT java_lang_Class* JNICALL Java_java_lang_reflect_Field_getType(JNIEnv * if (!resolve_class_from_typedesc(desc, true, false, &ret)) return NULL; - return (java_lang_Class *) ret; + return LLNI_classinfo_wrap(ret); } @@ -246,7 +244,7 @@ JNIEXPORT java_lang_Object* JNICALL Java_java_lang_reflect_Field_get(JNIEnv *env void *addr; int32_t slot; imm_union value; - java_objectheader *o; + java_handle_t *o; LLNI_field_get_cls(this, clazz, c); LLNI_field_get_val(this, slot , slot); @@ -279,7 +277,8 @@ JNIEXPORT java_lang_Object* JNICALL Java_java_lang_reflect_Field_get(JNIEnv *env break; case TYPE_ADR: - return (java_lang_Object *) *((java_objectheader **) addr); +#warning this whole thing needs to be inside a critical section! + return (java_lang_Object *) *((java_handle_t **) addr); } /* Now box the primitive types. */ @@ -857,7 +856,7 @@ JNIEXPORT void JNICALL Java_java_lang_reflect_Field_set(JNIEnv *env, java_lang_r /* check if value is an instance of the destination class */ /* XXX TODO */ - /* if (!builtin_instanceof((java_objectheader *) value, df->class)) */ + /* if (!builtin_instanceof((java_handle_t *) value, df->class)) */ /* break; */ *((java_lang_Object **) faddr) = value; @@ -1222,10 +1221,10 @@ JNIEXPORT void JNICALL Java_java_lang_reflect_Field_setDouble(JNIEnv *env, java_ */ JNIEXPORT java_lang_String* JNICALL Java_java_lang_reflect_Field_getSignature(JNIEnv *env, java_lang_reflect_Field* this) { - classinfo *c; - fieldinfo *f; - java_objectheader *o; - int32_t slot; + classinfo *c; + fieldinfo *f; + java_handle_t *o; + int32_t slot; /* get the class and the field */ @@ -1250,16 +1249,27 @@ JNIEXPORT java_lang_String* JNICALL Java_java_lang_reflect_Field_getSignature(JN * Method: declaredAnnotations * Signature: ()Ljava/util/Map; */ -JNIEXPORT struct java_util_Map* JNICALL Java_java_lang_reflect_Field_declaredAnnotations(JNIEnv *env, struct java_lang_reflect_Field* this) +JNIEXPORT struct java_util_Map* JNICALL Java_java_lang_reflect_Field_declaredAnnotations(JNIEnv *env, java_lang_reflect_Field *this) { - java_objectheader *o = (java_objectheader*)this; + java_handle_t *o = (java_handle_t*)this; + struct java_util_Map *declaredAnnotations = NULL; + java_handle_bytearray_t *annotations = NULL; + java_lang_Class *declaringClass = NULL; + classinfo *referer = NULL; - if (this == NULL) { - exceptions_throw_nullpointerexception(); - return NULL; + LLNI_field_get_ref(this, declaredAnnotations, declaredAnnotations); + + if (declaredAnnotations == NULL) { + LLNI_field_get_val(this, annotations, annotations); + LLNI_field_get_ref(this, clazz, declaringClass); + LLNI_class_get(this, referer); + + declaredAnnotations = reflect_get_declaredannotatios(annotations, declaringClass, referer); + + LLNI_field_set_ref(this, declaredAnnotations, declaredAnnotations); } - return reflect_get_declaredannotatios(&(this->declaredAnnotations), this->annotations, this->clazz, o->vftbl->class); + return declaredAnnotations; } #endif