Ensure log directory exists first.
[SquirrelJME.git] / emulators / emulator-base / src / main / c / mle_debug.c
blob348f2472190b9267a6ec86792f3f8f7d7036945c
1 /* -*- Mode: C++; indent-tabs-mode: t; tab-width: 4 -*-
2 // ---------------------------------------------------------------------------
3 // SquirrelJME
4 // Copyright (C) Stephanie Gawroriski <xer@multiphasicapps.net>
5 // ---------------------------------------------------------------------------
6 // SquirrelJME is under the Mozilla Public License Version 2.0.
7 // See license.mkd for licensing and copyright information.
8 // -------------------------------------------------------------------------*/
10 #include <stdlib.h>
12 #include "squirreljme.h"
14 // The class to forward to
15 #define DEBUGSHELF_CLASSNAME "cc/squirreljme/emulator/EmulatedDebugShelf"
17 #define DEBUGSHELF_BREAKPOINT_DESC "()V"
18 #define DEBUGSHELF_POINTCLASS_DESC "(Lcc/squirreljme/jvm/mle/brackets/TracePointBracket;)Ljava/lang/String;"
19 #define DEBUGSHELF_TRACESTACK_DESC "()[Lcc/squirreljme/jvm/mle/brackets/TracePointBracket;"
21 JNIEXPORT void Impl_mle_DebugShelf_breakpoint(
22 JNIEnv* env, jclass classy)
24 return forwardCallStaticVoid(env, DEBUGSHELF_CLASSNAME,
25 "breakpoint", DEBUGSHELF_BREAKPOINT_DESC);
28 JNIEXPORT jobjectArray JNICALL Impl_mle_DebugShelf_getThrowableTrace(
29 JNIEnv* env, jclass classy, jobject thrown)
31 return (*env)->NewObjectArray(env, 0, (*env)->FindClass(env,
32 "cc/squirreljme/jvm/mle/brackets/TracePointBracket"), NULL);
35 JNIEXPORT jobject JNICALL Impl_mle_DebugShelf_pointClass(
36 JNIEnv* env, jclass classy, jobject trace)
38 return forwardCallStaticObject(env, DEBUGSHELF_CLASSNAME,
39 "pointClass", DEBUGSHELF_POINTCLASS_DESC, trace);
42 JNIEXPORT jobject JNICALL Impl_mle_DebugShelf_traceStack(
43 JNIEnv* env, jclass classy)
45 return forwardCallStaticObject(env, DEBUGSHELF_CLASSNAME,
46 "traceStack", DEBUGSHELF_TRACESTACK_DESC);
49 JNIEXPORT jint JNICALL Impl_mle_DebugShelf_verbose(
50 JNIEnv* env, jclass classy, jint flags)
52 // No capability exists here
53 return 0;
56 JNIEXPORT void JNICALL Impl_mle_DebugShelf_verboseStop(
57 JNIEnv* env, jclass classy, jint code)
59 // No capability exists here
62 static const JNINativeMethod mleDebugMethods[] =
64 {"breakpoint", DEBUGSHELF_BREAKPOINT_DESC,
65 (void*)Impl_mle_DebugShelf_breakpoint},
66 {"getThrowableTrace", "(Ljava/lang/Throwable;)[Lcc/squirreljme/jvm/mle/brackets/TracePointBracket;",
67 (void*)Impl_mle_DebugShelf_getThrowableTrace},
68 {"pointClass", DEBUGSHELF_POINTCLASS_DESC, (void*)Impl_mle_DebugShelf_pointClass},
69 {"traceStack", DEBUGSHELF_TRACESTACK_DESC, (void*)Impl_mle_DebugShelf_traceStack},
70 {"verbose", "(I)I",
71 (void*)Impl_mle_DebugShelf_verbose},
72 {"verboseInternalThread", "(I)I",
73 (void*)Impl_mle_DebugShelf_verbose},
74 {"verboseStop", "(I)V",
75 (void*)Impl_mle_DebugShelf_verboseStop},
78 jint JNICALL mleDebugInit(JNIEnv* env, jclass classy)
80 return (*env)->RegisterNatives(env,
81 (*env)->FindClass(env, "cc/squirreljme/jvm/mle/DebugShelf"),
82 mleDebugMethods, sizeof(mleDebugMethods) /
83 sizeof(JNINativeMethod));