diff options
author | Alon Zakai <alonzakai@gmail.com> | 2013-05-08 16:06:26 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2013-05-08 16:06:26 -0700 |
commit | 693682fc225e60c9c335ee910fb3c8bb5cf85470 (patch) | |
tree | b2c1285adf65b68a7b20aa231c4c5665966b2c18 /tests/nbody-java/native_java_lang_Throwable.c | |
parent | b41b535aeac53740dec416f617378ec4e4e382ce (diff) |
add nbody-java code
Diffstat (limited to 'tests/nbody-java/native_java_lang_Throwable.c')
-rw-r--r-- | tests/nbody-java/native_java_lang_Throwable.c | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/tests/nbody-java/native_java_lang_Throwable.c b/tests/nbody-java/native_java_lang_Throwable.c new file mode 100644 index 00000000..5204e0a0 --- /dev/null +++ b/tests/nbody-java/native_java_lang_Throwable.c @@ -0,0 +1,82 @@ + +#include "xmlvm.h" +#include "java_lang_Throwable.h" + + +//XMLVM_BEGIN_NATIVE_IMPLEMENTATION + +#ifdef XMLVM_ENABLE_STACK_TRACES + +#include "java_lang_StackTraceElement.h" + +java_lang_StackTraceElement* createStackTraceElement(XMLVM_STACK_TRACE_ELEMENT* elem) +{ + java_lang_StackTraceElement* ste = (java_lang_StackTraceElement*)__NEW_java_lang_StackTraceElement(); + java_lang_StackTraceElement___INIT____java_lang_String_java_lang_String_java_lang_String_int(ste, + xmlvm_create_java_string(elem->className), + xmlvm_create_java_string(elem->methodName), + xmlvm_create_java_string(elem->fileName), + elem->lineNumber); + return ste; +} +#endif + +//XMLVM_END_NATIVE_IMPLEMENTATION + +JAVA_OBJECT java_lang_Throwable_fillInStackTrace__(JAVA_OBJECT me) +{ + //XMLVM_BEGIN_NATIVE[java_lang_Throwable_fillInStackTrace__] +#ifdef XMLVM_ENABLE_STACK_TRACES + + XMLVM_STACK_TRACE_CURRENT* threadStack = getCurrentStackTrace(); + int size = threadStack->stackSize; + + if (!__TIB_java_lang_StackTraceElement.classInitialized) __INIT_java_lang_StackTraceElement(); + JAVA_OBJECT array = XMLVMArray_createSingleDimension(__CLASS_java_lang_StackTraceElement, size); + + // Put the currentLocation at the beginning of the array + ((JAVA_ARRAY_OBJECT*) (((org_xmlvm_runtime_XMLVMArray*) array)->fields.org_xmlvm_runtime_XMLVMArray.array_))[0] = createStackTraceElement(threadStack->topOfStack->currentLocation); + + XMLVM_STACK_TRACE_LINK* curLink = threadStack->topOfStack; + for (int index = 1; index < size; index++) { + java_lang_StackTraceElement* ste = createStackTraceElement(curLink->element); + ((JAVA_ARRAY_OBJECT*) (((org_xmlvm_runtime_XMLVMArray*) array)->fields.org_xmlvm_runtime_XMLVMArray.array_))[index] = ste; + curLink = curLink->nextLink; + } + + ((java_lang_Throwable*) me)->fields.java_lang_Throwable.stackTrace_ = array; + + return me; +#else + return JAVA_NULL; +#endif + //XMLVM_END_NATIVE +} + +JAVA_OBJECT java_lang_Throwable_getStackTraceImpl__(JAVA_OBJECT me) +{ + //XMLVM_BEGIN_NATIVE[java_lang_Throwable_getStackTraceImpl__] +#ifdef XMLVM_ENABLE_STACK_TRACES + + return ((java_lang_Throwable*) me)->fields.java_lang_Throwable.stackTrace_; + +#else + +// TODO throw RuntimeException with the following message instead of printf + printf("Stack traces are not enabled natively! To enable stack traces, define XMLVM_ENABLE_STACK_TRACES. Keep in mind this will decrease performance!\n"); + XMLVM_UNIMPLEMENTED_NATIVE_METHOD(); + +#endif + //XMLVM_END_NATIVE +} + + +void xmlvm_init_native_java_lang_Throwable() +{ + //XMLVM_BEGIN_NATIVE_IMPLEMENTATION_INIT + //XMLVM_END_NATIVE_IMPLEMENTATION_INIT +#ifdef XMLVM_VTABLE_IDX_java_lang_Throwable_fillInStackTrace__ + __TIB_java_lang_Throwable.vtable[XMLVM_VTABLE_IDX_java_lang_Throwable_fillInStackTrace__] = + (VTABLE_PTR) java_lang_Throwable_fillInStackTrace__; +#endif +} |