1 /* -*- Mode: C++; indent-tabs-mode: t; tab-width: 4 -*-
2 // ---------------------------------------------------------------------------
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 // -------------------------------------------------------------------------*/
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
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
},
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
));