MCPcopy Create free account
hub / github.com/Ahmeth4n/renef / lua_java_call_instance

Function lua_java_call_instance

src/agent/lua/api_java.c:857–919  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

855}
856
857static int lua_java_call_instance(lua_State* L) {
858 jobject* ud = (jobject*)luaL_checkudata(L, 1, JAVA_INSTANCE_MT);
859 jobject instance = *ud;
860 const char* method_name = luaL_checkstring(L, 2);
861 const char* sig = luaL_checkstring(L, 3);
862
863 JNIEnv* env = get_jni_env();
864 if (!env) {
865 lua_pushnil(L);
866 return 1;
867 }
868
869 jvalue args[MAX_PARAMS];
870 memset(args, 0, sizeof(args));
871
872 ParsedSignature parsed = parse_signature(sig);
873 lua_to_jvalue(env,L,&parsed,args,4);
874
875 jvalue result = call_instance_method(env, instance, method_name, sig, args);
876
877 switch (parsed.return_type) {
878 case 'V':
879 return 0;
880 case 'Z':
881 lua_pushboolean(L, result.z);
882 return 1;
883 case 'I':
884 lua_pushinteger(L, result.i);
885 return 1;
886 case 'J':
887 lua_pushinteger(L, (lua_Integer)result.j);
888 return 1;
889 case 'F':
890 lua_pushnumber(L, result.f);
891 return 1;
892 case 'D':
893 lua_pushnumber(L, result.d);
894 return 1;
895 case 'L':
896 case '[':
897 if (result.l) {
898 jclass string_class = (*env)->FindClass(env, "java/lang/String");
899 if ((*env)->IsInstanceOf(env, result.l, string_class)) {
900 const char* str = (*env)->GetStringUTFChars(env, (jstring)result.l, NULL);
901 lua_pushstring(L, str);
902 (*env)->ReleaseStringUTFChars(env, (jstring)result.l, str);
903 } else {
904 jobject global = (*env)->NewGlobalRef(env, result.l);
905 jobject* obj_ud = (jobject*)lua_newuserdata(L, sizeof(jobject));
906 *obj_ud = global;
907 luaL_getmetatable(L, JAVA_INSTANCE_MT);
908 lua_setmetatable(L, -2);
909 }
910 (*env)->DeleteLocalRef(env, result.l);
911 } else {
912 lua_pushnil(L);
913 }
914 return 1;

Callers

nothing calls this directly

Calls 4

get_jni_envFunction · 0.85
parse_signatureFunction · 0.85
lua_to_jvalueFunction · 0.85
call_instance_methodFunction · 0.85

Tested by

no test coverage detected