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

Reply via email to