It's needed for testing stack trace creation from VM native
methods.
Signed-off-by: Tomek Grabiec <[email protected]>
---
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/jatovm-devel