It's needed for testing stack trace creation from VM native
methods.

Signed-off-by: Tomek Grabiec <tgrab...@gmail.com>
---
 regression/jato/internal/VM.java   |    1 +
 regression/jvm/StackTraceTest.java |    4 ++--
 vm/jato.c                          |    8 ++++++++
 3 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/regression/jato/internal/VM.java b/regression/jato/internal/VM.java
index 18721bd..3e423b2 100644
--- a/regression/jato/internal/VM.java
+++ b/regression/jato/internal/VM.java
@@ -7,4 +7,5 @@ public class VM {
   public static native void println(String line);
   public static native void enableFault(int kind, Object arg);
   public static native void disableFault(int kind);
+  public static native void throwNullPointerException();
 };
diff --git a/regression/jvm/StackTraceTest.java 
b/regression/jvm/StackTraceTest.java
index a2aa3fd..f50957e 100644
--- a/regression/jvm/StackTraceTest.java
+++ b/regression/jvm/StackTraceTest.java
@@ -57,7 +57,7 @@ public class StackTraceTest extends TestCase {
         StackTraceElement []st = null;
 
         try {
-            VM.println(null);
+            VM.throwNullPointerException();
         } catch (NullPointerException e) {
             st = e.getStackTrace();
         }
@@ -66,7 +66,7 @@ public class StackTraceTest extends TestCase {
         assertEquals(4, st.length);
 
         assertStackTraceElement(st[0], -1, null, "jato.internal.VM",
-                "println", true);
+                "throwNullPointerException", true);
 
         assertStackTraceElement(st[1], 60, "StackTraceTest.java",
                 "jvm.StackTraceTest",
diff --git a/vm/jato.c b/vm/jato.c
index 02f060d..b37ace4 100644
--- a/vm/jato.c
+++ b/vm/jato.c
@@ -415,11 +415,19 @@ native_vmfile_is_directory(struct vm_object *dirpath)
        return S_ISDIR(buf.st_mode);
 }
 
+static void
+native_vm_throw_null_pointer_exception(void)
+{
+       signal_new_exception(vm_java_lang_NullPointerException, NULL);
+       throw_from_native(0);
+}
+
 static struct vm_native natives[] = {
        DEFINE_NATIVE("gnu/classpath/VMStackWalker", "getClassContext", 
&native_vmstackwalker_getclasscontext),
        DEFINE_NATIVE("gnu/classpath/VMSystemProperties", "preInit", 
&native_vmsystemproperties_preinit),
        DEFINE_NATIVE("jato/internal/VM", "exit", &native_vmruntime_exit),
        DEFINE_NATIVE("jato/internal/VM", "println", &native_vmruntime_println),
+       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", "isPrimitive", 
&native_vmclass_isprimitive),
-- 
1.6.0.6


------------------------------------------------------------------------------
_______________________________________________
Jatovm-devel mailing list
Jatovm-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jatovm-devel

Reply via email to