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