* cacao_get_field_address: Don't call cacao_callingMethod, instead use
authortwisti <none@none>
Wed, 26 Oct 2005 20:40:00 +0000 (20:40 +0000)
committertwisti <none@none>
Wed, 26 Oct 2005 20:40:00 +0000 (20:40 +0000)
  cacao_createClassContextArray.

src/native/vm/Field.c

index 4c5f6f125e7ed52debcc89f3b486c612d2cb7697..407832f7c0a077a71c56c2be42f19658c9a04c99 100644 (file)
@@ -29,7 +29,7 @@
    Changes: Joseph Wenninger
             Christian Thalinger
 
-   $Id: Field.c 3458 2005-10-19 23:38:32Z twisti $
+   $Id: Field.c 3504 2005-10-26 20:40:00Z twisti $
 
 */
 
 static void *cacao_get_field_address(java_lang_reflect_Field *this,
                                                                         java_lang_Object *o)
 {
-       classinfo  *c;
-       fieldinfo  *f;
-       methodinfo *caller;
+       classinfo        *c;
+       fieldinfo        *f;
+       java_objectarray *oa;
+       classinfo        *callerclass;
 
        c = (classinfo *) this->declaringClass;
        f = &c->fields[this->slot];
@@ -90,9 +91,19 @@ static void *cacao_get_field_address(java_lang_reflect_Field *this,
                /* check if we should bypass security checks (AccessibleObject) */
 
                if (this->flag == false) {
-                       caller = cacao_callingMethod();
+                       /* get the calling class */
 
-                       if (!access_is_accessible_member(caller->class, c, f->flags)) {
+                       oa = cacao_createClassContextArray();
+
+                       /* this function is always called like this:
+
+                              java.lang.reflect.Field.xxx (Native Method)
+                          [0] <caller>
+                       */
+
+                       callerclass = (classinfo *) oa->data[0];
+
+                       if (!access_is_accessible_member(callerclass, c, f->flags)) {
                                *exceptionptr =
                                        new_exception(string_java_lang_IllegalAccessException);
                                return NULL;