Signed-off-by: Tomek Grabiec <tgrab...@gmail.com>
---
 include/vm/java_lang.h |    1 +
 include/vm/object.h    |    4 ----
 vm/class.c             |    4 +++-
 vm/jato.c              |    5 ++++-
 4 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/include/vm/java_lang.h b/include/vm/java_lang.h
index e3e2a25..7a10325 100644
--- a/include/vm/java_lang.h
+++ b/include/vm/java_lang.h
@@ -6,6 +6,7 @@ extern struct vm_class *vm_java_lang_Class;
 extern struct vm_class *vm_java_lang_String;
 extern struct vm_class *vm_java_lang_Throwable;
 
+extern struct vm_field *vm_java_lang_Class_vmdata;
 extern struct vm_field *vm_java_lang_String_offset;
 extern struct vm_field *vm_java_lang_String_count;
 extern struct vm_field *vm_java_lang_String_value;
diff --git a/include/vm/object.h b/include/vm/object.h
index 64472b2..dd0905d 100644
--- a/include/vm/object.h
+++ b/include/vm/object.h
@@ -16,10 +16,6 @@ struct vm_object {
         * this points to the (artificial) class named "[I". */
        struct vm_class *class;
 
-       /* For instances of java.lang.Class this points to the class
-          represented by this java.lang.Class instance. */
-       struct vm_class *java_lang_Class_class;
-
        pthread_mutex_t mutex;
 
        unsigned int array_length;
diff --git a/vm/class.c b/vm/class.c
index eaacbda..b48e43a 100644
--- a/vm/class.c
+++ b/vm/class.c
@@ -38,6 +38,7 @@
 #include <vm/classloader.h>
 #include <vm/die.h>
 #include <vm/field.h>
+#include <vm/java_lang.h>
 #include <vm/method.h>
 #include <vm/object.h>
 #include <vm/string.h>
@@ -276,7 +277,8 @@ int vm_class_init(struct vm_class *vmc)
                return -1;
        }
 
-       vmc->object->java_lang_Class_class = vmc;
+       field_set_object(vmc->object, vm_java_lang_Class_vmdata,
+               (struct vm_object *)vmc);
 
        if (vmc->class) {
                /* XXX: Make sure there's at most one of these. */
diff --git a/vm/jato.c b/vm/jato.c
index c7f31ac..cc94265 100644
--- a/vm/jato.c
+++ b/vm/jato.c
@@ -121,7 +121,8 @@ native_vmclass_getname(struct vm_object *object)
 {
        struct vm_class *class;
 
-       class = object->java_lang_Class_class;
+       class = (struct vm_class*)field_get_object(object,
+                                                  vm_java_lang_Class_vmdata);
        assert(class != NULL);
 
        return vm_object_alloc_string_from_c(class->name);
@@ -176,12 +177,14 @@ struct field_preload_entry {
        struct vm_field **field;
 };
 
+struct vm_field *vm_java_lang_Class_vmdata;
 struct vm_field *vm_java_lang_String_offset;
 struct vm_field *vm_java_lang_String_count;
 struct vm_field *vm_java_lang_String_value;
 struct vm_field *vm_java_lang_Throwable_detailMessage;
 
 static const struct field_preload_entry field_preload_entries[] = {
+       { &vm_java_lang_Class, "vmdata", "Ljava/lang/Object;", 
&vm_java_lang_Class_vmdata },
        { &vm_java_lang_String, "offset", "I",  &vm_java_lang_String_offset },
        { &vm_java_lang_String, "count", "I",   &vm_java_lang_String_count },
        { &vm_java_lang_String, "value", "[C",  &vm_java_lang_String_value },
-- 
1.6.0.6


------------------------------------------------------------------------------
_______________________________________________
Jatovm-devel mailing list
Jatovm-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jatovm-devel

Reply via email to