Signed-off-by: Tomek Grabiec <[email protected]>
---
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/jatovm-devel