Application classes should not be loaded by bootstrap classloader,
so that getClassLoader() returns not null for them.

Signed-off-by: Tomek Grabiec <tgrab...@gmail.com>
---
 include/vm/preload.h |    2 ++
 vm/jato.c            |   25 +++++++++++++++++++++++--
 vm/preload.c         |    7 +++++++
 3 files changed, 32 insertions(+), 2 deletions(-)

diff --git a/include/vm/preload.h b/include/vm/preload.h
index c5f6614..b65b938 100644
--- a/include/vm/preload.h
+++ b/include/vm/preload.h
@@ -82,6 +82,7 @@ extern struct vm_field *vm_java_lang_reflect_Field_slot;
 extern struct vm_field *vm_java_lang_reflect_Method_declaringClass;
 extern struct vm_field *vm_java_lang_reflect_Method_name;
 extern struct vm_field *vm_java_lang_reflect_Method_slot;
+extern struct vm_field *vm_java_lang_ClassLoader_systemClassLoader;
 
 extern struct vm_method *vm_java_util_Properties_setProperty;
 extern struct vm_method *vm_java_lang_Throwable_initCause;
@@ -107,6 +108,7 @@ extern struct vm_method *vm_java_lang_Integer_init;
 extern struct vm_method *vm_java_lang_Long_init;
 extern struct vm_method *vm_java_lang_Short_init;
 extern struct vm_method *vm_java_lang_ClassLoader_loadClass;
+extern struct vm_method *vm_java_lang_ClassLoader_getSystemClassLoader;
 extern struct vm_method *vm_java_lang_Number_intValue;
 extern struct vm_method *vm_java_lang_Number_floatValue;
 
diff --git a/vm/jato.c b/vm/jato.c
index 9c5e0c9..e9277b8 100644
--- a/vm/jato.c
+++ b/vm/jato.c
@@ -1187,10 +1187,24 @@ static void parse_options(int argc, char *argv[])
        }
 }
 
+static struct vm_object *get_system_class_loader(void)
+{
+       if (vm_class_ensure_init(vm_java_lang_ClassLoader))
+               return NULL;
+
+       return 
vm_call_method_object(vm_java_lang_ClassLoader_getSystemClassLoader);
+}
+
 static int
 do_main_class(void)
 {
-       struct vm_class *vmc = classloader_load(NULL, classname);
+       struct vm_object *loader;
+
+       loader = get_system_class_loader();
+       if (!loader)
+               return -1;
+
+       struct vm_class *vmc = classloader_load(loader, classname);
        if (!vmc) {
                fprintf(stderr, "error: %s: could not load\n", classname);
                return -1;
@@ -1246,7 +1260,14 @@ do_jar_file(void)
 static int
 do_method_trace(void)
 {
-       struct vm_class *vmc = classloader_load(NULL, method_trace_class_name);
+       struct vm_object *loader;
+
+       loader = get_system_class_loader();
+       if (!loader)
+               return -1;
+
+       struct vm_class *vmc =
+               classloader_load(loader, method_trace_class_name);
        if (!vmc) {
                NOT_IMPLEMENTED;
                return -1;
diff --git a/vm/preload.c b/vm/preload.c
index 84bea01..0072acc 100644
--- a/vm/preload.c
+++ b/vm/preload.c
@@ -253,6 +253,7 @@ struct vm_method *vm_java_lang_Integer_init;
 struct vm_method *vm_java_lang_Long_init;
 struct vm_method *vm_java_lang_Short_init;
 struct vm_method *vm_java_lang_ClassLoader_loadClass;
+struct vm_method *vm_java_lang_ClassLoader_getSystemClassLoader;
 struct vm_method *vm_java_lang_VMString_intern;
 struct vm_method *vm_java_lang_Number_intValue;
 struct vm_method *vm_java_lang_Number_floatValue;
@@ -403,6 +404,12 @@ static const struct method_preload_entry 
method_preload_entries[] = {
                &vm_java_lang_ClassLoader_loadClass,
        },
        {
+               &vm_java_lang_ClassLoader,
+               "getSystemClassLoader",
+               "()Ljava/lang/ClassLoader;",
+               &vm_java_lang_ClassLoader_getSystemClassLoader,
+       },
+       {
                &vm_java_lang_VMString,
                "intern",
                "(Ljava/lang/String;)Ljava/lang/String;",
-- 
1.6.0.6


------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with 
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
_______________________________________________
Jatovm-devel mailing list
Jatovm-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jatovm-devel

Reply via email to