theKernel 10.0
Loading...
Searching...
No Matches
MkCall_jv.c File Reference

tag: nhi1-release-250425 More...

#include <jni.h>
#include "LibMkKernel_jv.h"
+ Include dependency graph for MkCall_jv.c:

Go to the source code of this file.

Functions

MK_PTR jvmkkernel_ProcCreate (MK_RT mkrt, JNIEnv *env, jobject object, jclass class, jmethodID method, bool hasArg)
 
void jvmkkernel_ProcFree (struct MkProcCallS **callP)
 
void jvmkkernel_ObjectDeleteFree (MkObjectDeleteFreeF_ARGS)
 
enum MkErrorE jvmkkernel_ObjectDeleteCall (MK_RT mkrt, MK_OBJN const obj, MK_STRN const typeName, MK_HDL const typeHdl, MK_HDL const objHdl, MK_CBP const __data__)
 

Detailed Description

tag: nhi1-release-250425

Definition in file MkCall_jv.c.

Function Documentation

◆ jvmkkernel_ObjectDeleteCall()

enum MkErrorE jvmkkernel_ObjectDeleteCall ( MK_RT mkrt,
MK_OBJN const obj,
MK_STRN const typeName,
MK_HDL const typeHdl,
MK_HDL const objHdl,
MK_CBP const __data__ )

Definition at line 66 of file MkCall_jv.c.

67{
69
70 // if NO self object is available than NO callback is called
71 if (!MkSelfExists(obj)) return MK_OK;
72
73 struct MkProcCallS const * const call = (struct MkProcCallS const * const) __data__;
74 JNIEnv *env = call->env;
75
76 jstring typeNameO = (*env)->NewStringUTF(env,typeName);
77
78 // call the function
79 if (call->class == NULL) {
80 // method call of the same class
81 (*env)->CallVoidMethod(env, call->object, call->method, typeNameO, typeHdl, objHdl);
82 } else if (call->object == NULL) {
83 // static method call returning an object
84 (*env)->CallStaticVoidMethod(env, call->class, call->method, typeNameO, typeHdl, objHdl);
85 } else {
86 // method call of an other class
87 (*env)->CallNonvirtualVoidMethod(env, call->object, call->class, call->method, typeNameO, typeHdl, objHdl);
88 }
89
90 // check on error
91 if((*env)->ExceptionCheck(env) != JNI_FALSE) {
92 // is the ERROR from "java" or "jvmkkernel"
93 OT_ERROR_LNG_2_META(MkObjectC_TT);
94 }
95 return MkErrorStack_0E_Check();
96}
#define MkErrorStack_0E_Check()
@ MK_OK
(persistent) everything is OK.
#define MkObjectC_TT
class as MkTypeS-class-type, useable in a class-macro as: class##_TT …
static bool MkSelfExists(MK_OBJN obj)
Check if the MkObjectS::self exists …
#define MkObjectDeleteCallF_CHECK
validate call to MkObjectDeleteCallF

◆ jvmkkernel_ObjectDeleteFree()

void jvmkkernel_ObjectDeleteFree ( MkObjectDeleteFreeF_ARGS )

Definition at line 59 of file MkCall_jv.c.

60{
61 if (dataP == NULL) return;
62 MK(ProcFree)((struct MkProcCallS **)dataP);
63}

◆ jvmkkernel_ProcCreate()

MK_PTR jvmkkernel_ProcCreate ( MK_RT mkrt,
JNIEnv * env,
jobject object,
jclass class,
jmethodID method,
bool hasArg )

Definition at line 15 of file MkCall_jv.c.

23{
24 if (object == NULL && class == NULL) {
25 return NULL;
26 }
27 struct MkProcCallS * call = MkSysCalloc(MK_ERROR_PANIC, 1, sizeof(*call));
28 if (object != NULL) {
29 JavaErrorCheckNULL (call->object = (*env)->NewGlobalRef(env, object));
30 }
31 if (class != NULL) {
32 JavaErrorCheckNULL (call->class = (*env)->NewGlobalRef(env, class));
33 }
34 call->mkrt = mkrt;
35 call->hasArg = hasArg;
36 call->env = env;
37 call->method = method;
38 return call;
39error:
40 if (call->object) (*env)->DeleteGlobalRef(env, call->object);
41 if (call->class) (*env)->DeleteGlobalRef(env, call->class);
42 MkSysFree(call);
43 return NULL;
44}
#define MK_ERROR_PANIC
MK_PTR MkSysCalloc(MK_OBJN fmtobj, size_t const nmemb, size_t const size)
calloc syscall with jvmkkernel error plugin
#define MkSysFree(pointer)

◆ jvmkkernel_ProcFree()

void jvmkkernel_ProcFree ( struct MkProcCallS ** callP)

Definition at line 46 of file MkCall_jv.c.

47{
48 if (callP == NULL) return;
49 struct MkProcCallS * call = *callP;
50 JNIEnv *env = call->env;
51 if (call->object != NULL) (*env)->DeleteGlobalRef(env, call->object);
52 if (call->class != NULL) (*env)->DeleteGlobalRef(env, call->class );
53 MkSysFree(*callP);
54}