Signed-off-by: Tomek Grabiec <tgrab...@gmail.com> --- include/vm/preload.h | 1 + vm/jato.c | 37 +++++++++++++++++++++++++++++++++++++ vm/preload.c | 2 ++ 3 files changed, 40 insertions(+), 0 deletions(-)
diff --git a/include/vm/preload.h b/include/vm/preload.h index 867f9fc..d7f5a52 100644 --- a/include/vm/preload.h +++ b/include/vm/preload.h @@ -15,6 +15,7 @@ extern struct vm_class *vm_java_lang_ArithmeticException; extern struct vm_class *vm_java_lang_NullPointerException; extern struct vm_class *vm_java_lang_NegativeArraySizeException; extern struct vm_class *vm_java_lang_ClassCastException; +extern struct vm_class *vm_java_lang_ClassNotFoundException; extern struct vm_class *vm_java_lang_NoClassDefFoundError; extern struct vm_class *vm_java_lang_UnsatisfiedLinkError; extern struct vm_class *vm_java_lang_ArrayIndexOutOfBoundsException; diff --git a/vm/jato.c b/vm/jato.c index d76029e..ff94fba 100644 --- a/vm/jato.c +++ b/vm/jato.c @@ -415,6 +415,42 @@ native_vmclass_getclassloader(struct vm_object *object) } static struct vm_object * +native_vmclass_forname(struct vm_object *name, jboolean initialize, + struct vm_object *loader) +{ + if (!name) { + signal_new_exception(vm_java_lang_NullPointerException, NULL); + goto throw; + } + + const char *class_name = vm_string_to_cstr(name); + if (!class_name) { + NOT_IMPLEMENTED; + return NULL; + } + + /* TODO: use @loader to load the class. */ + struct vm_class *class = classloader_load(class_name); + if (!class) { + signal_new_exception(vm_java_lang_ClassNotFoundException, + class_name); + goto throw; + } + + if (initialize) { + vm_class_ensure_init(class); + if (exception_occurred()) + goto throw; + } + + return class->object; + + throw: + throw_from_native(sizeof(name) + sizeof(initialize) + sizeof(loader)); + return NULL; +} + +static struct vm_object * native_vmclass_getname(struct vm_object *object) { struct vm_class *class; @@ -501,6 +537,7 @@ static struct vm_native natives[] = { DEFINE_NATIVE("jato/internal/VM", "throwNullPointerException", &native_vm_throw_null_pointer_exception), DEFINE_NATIVE("java/lang/VMClass", "getClassLoader", &native_vmclass_getclassloader), DEFINE_NATIVE("java/lang/VMClass", "getName", &native_vmclass_getname), + DEFINE_NATIVE("java/lang/VMClass", "forName", &native_vmclass_forname), DEFINE_NATIVE("java/lang/VMClass", "isPrimitive", &native_vmclass_isprimitive), DEFINE_NATIVE("java/lang/VMClassLoader", "getPrimitiveClass", &native_vmclassloader_getprimitiveclass), DEFINE_NATIVE("java/io/VMFile", "isDirectory", &native_vmfile_is_directory), diff --git a/vm/preload.c b/vm/preload.c index 54e749c..b168310 100644 --- a/vm/preload.c +++ b/vm/preload.c @@ -51,6 +51,7 @@ struct vm_class *vm_java_lang_ArithmeticException; struct vm_class *vm_java_lang_NullPointerException; struct vm_class *vm_java_lang_NegativeArraySizeException; struct vm_class *vm_java_lang_ClassCastException; +struct vm_class *vm_java_lang_ClassNotFoundException; struct vm_class *vm_java_lang_NoClassDefFoundError; struct vm_class *vm_java_lang_UnsatisfiedLinkError; struct vm_class *vm_java_lang_ArrayIndexOutOfBoundsException; @@ -83,6 +84,7 @@ static const struct preload_entry preload_entries[] = { { "java/lang/ArrayIndexOutOfBoundsException", &vm_java_lang_ArrayIndexOutOfBoundsException }, { "java/lang/ArrayStoreException", &vm_java_lang_ArrayStoreException }, { "java/lang/ClassCastException", &vm_java_lang_ClassCastException }, + { "java/lang/ClassNotFoundException", &vm_java_lang_ClassNotFoundException }, { "java/lang/Error", &vm_java_lang_Error }, { "java/lang/ExceptionInInitializerError", &vm_java_lang_ExceptionInInitializerError }, { "java/lang/NegativeArraySizeException", &vm_java_lang_NegativeArraySizeException }, -- 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