VaKeR CYBER ARMY
Logo of a company Server : Apache/2.4.41 (Ubuntu)
System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64
User : www-data ( 33)
PHP Version : 7.4.33
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Directory :  /usr/share/emscripten/tests/nbody-java/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //usr/share/emscripten/tests/nbody-java/native_java_lang_Throwable.c
#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
}

VaKeR 2022