Needed for VMSystemProperties initialisation.

Signed-off-by: Vegard Nossum <vegard.nos...@gmail.com>
---
 include/vm/java_lang.h |    4 +++
 vm/jato.c              |   51 ++++++++++++++++++++++++++++++++++++++++-------
 2 files changed, 47 insertions(+), 8 deletions(-)

diff --git a/include/vm/java_lang.h b/include/vm/java_lang.h
index 218a358..06ed716 100644
--- a/include/vm/java_lang.h
+++ b/include/vm/java_lang.h
@@ -5,6 +5,8 @@ extern struct vm_class *vm_java_lang_Object;
 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_class *vm_java_util_Properties;
+
 extern struct vm_class *vm_boolean_class;
 extern struct vm_class *vm_char_class;
 extern struct vm_class *vm_float_class;
@@ -20,4 +22,6 @@ extern struct vm_field *vm_java_lang_String_count;
 extern struct vm_field *vm_java_lang_String_value;
 extern struct vm_field *vm_java_lang_Throwable_detailMessage;
 
+extern struct vm_method *vm_java_util_Properties_setProperty;
+
 #endif
diff --git a/vm/jato.c b/vm/jato.c
index ec46b15..fb47173 100644
--- a/vm/jato.c
+++ b/vm/jato.c
@@ -183,6 +183,8 @@ struct vm_class *vm_java_lang_Object;
 struct vm_class *vm_java_lang_Class;
 struct vm_class *vm_java_lang_String;
 struct vm_class *vm_java_lang_Throwable;
+struct vm_class *vm_java_util_Properties;
+
 struct vm_class *vm_boolean_class;
 struct vm_class *vm_char_class;
 struct vm_class *vm_float_class;
@@ -197,6 +199,7 @@ static const struct preload_entry preload_entries[] = {
        { "java/lang/Class",            &vm_java_lang_Class },
        { "java/lang/String",           &vm_java_lang_String },
        { "java/lang/Throwable",        &vm_java_lang_Throwable },
+       { "java/util/Properties",       &vm_java_util_Properties },
 };
 
 struct field_preload_entry {
@@ -220,6 +223,24 @@ static const struct field_preload_entry 
field_preload_entries[] = {
        { &vm_java_lang_Throwable, "detailMessage", "Ljava/lang/String;", 
&vm_java_lang_Throwable_detailMessage },
 };
 
+struct method_preload_entry {
+       struct vm_class **class;
+       const char *name;
+       const char *type;
+       struct vm_method **method;
+};
+
+struct vm_method *vm_java_util_Properties_setProperty;
+
+static const struct method_preload_entry method_preload_entries[] = {
+       {
+               &vm_java_util_Properties,
+               "setProperty",
+               "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/Object;",
+               &vm_java_util_Properties_setProperty,
+       },
+};
+
 static int preload_vm_classes(void)
 {
        for (unsigned int i = 0; i < ARRAY_SIZE(preload_entries); ++i) {
@@ -234,6 +255,15 @@ static int preload_vm_classes(void)
                *pe->class = class;
        }
 
+       vm_boolean_class = classloader_load_primitive("Z");
+       vm_char_class = classloader_load_primitive("C");
+       vm_float_class = classloader_load_primitive("F");
+       vm_double_class = classloader_load_primitive("D");
+       vm_byte_class = classloader_load_primitive("B");
+       vm_short_class = classloader_load_primitive("S");
+       vm_int_class = classloader_load_primitive("I");
+       vm_long_class = classloader_load_primitive("J");
+
        for (unsigned int i = 0; i < ARRAY_SIZE(field_preload_entries); ++i) {
                const struct field_preload_entry *pe
                        = &field_preload_entries[i];
@@ -248,14 +278,19 @@ static int preload_vm_classes(void)
                *pe->field = field;
        }
 
-       vm_boolean_class = classloader_load_primitive("Z");
-       vm_char_class = classloader_load_primitive("C");
-       vm_float_class = classloader_load_primitive("F");
-       vm_double_class = classloader_load_primitive("D");
-       vm_byte_class = classloader_load_primitive("B");
-       vm_short_class = classloader_load_primitive("S");
-       vm_int_class = classloader_load_primitive("I");
-       vm_long_class = classloader_load_primitive("J");
+       for (unsigned int i = 0; i < ARRAY_SIZE(method_preload_entries); ++i) {
+               const struct method_preload_entry *me
+                       = &method_preload_entries[i];
+
+               struct vm_method *method = vm_class_get_method(*me->class,
+                       me->name, me->type);
+               if (!method) {
+                       NOT_IMPLEMENTED;
+                       return 1;
+               }
+
+               *me->method = method;
+       }
 
        return 0;
 }
-- 
1.6.0.4


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

Reply via email to