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

Function lua_java_call_static

src/agent/lua/api_java.c:790–855  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

788}
789
790static int lua_java_call_static(lua_State* L) {
791 JavaClassWrapper** ud = (JavaClassWrapper**)luaL_checkudata(L, 1, JAVA_WRAPPER_MT);
792 JavaClassWrapper* wrapper = *ud;
793 const char* method_name = luaL_checkstring(L, 2);
794 const char* sig = luaL_checkstring(L, 3);
795
796 JNIEnv* env = get_jni_env();
797 if (!env) {
798 lua_pushnil(L);
799 return 1;
800 }
801
802 jvalue args[MAX_PARAMS];
803 memset(args, 0, sizeof(args));
804
805 ParsedSignature parsed = parse_signature(sig);
806 lua_to_jvalue(env,L,&parsed,args,4);
807
808
809 jvalue result = call_static_method(env, wrapper, method_name, sig, args);
810
811
812
813 switch (parsed.return_type) {
814 case 'V':
815 return 0;
816 case 'Z':
817 lua_pushboolean(L, result.z);
818 return 1;
819 case 'I':
820 lua_pushinteger(L, result.i);
821 return 1;
822 case 'J':
823 lua_pushinteger(L, (lua_Integer)result.j);
824 return 1;
825 case 'F':
826 lua_pushnumber(L, result.f);
827 return 1;
828 case 'D':
829 lua_pushnumber(L, result.d);
830 return 1;
831 case 'L':
832 case '[':
833 if (result.l) {
834 jclass string_class = (*env)->FindClass(env, "java/lang/String");
835 if ((*env)->IsInstanceOf(env, result.l, string_class)) {
836 const char* str = (*env)->GetStringUTFChars(env, (jstring)result.l, NULL);
837 lua_pushstring(L, str);
838 (*env)->ReleaseStringUTFChars(env, (jstring)result.l, str);
839 } else {
840 jobject global = (*env)->NewGlobalRef(env, result.l);
841 jobject* obj_ud = (jobject*)lua_newuserdata(L, sizeof(jobject));
842 *obj_ud = global;
843 luaL_getmetatable(L, JAVA_INSTANCE_MT);
844 lua_setmetatable(L, -2);
845 }
846 (*env)->DeleteLocalRef(env, result.l);
847 } else {

Callers

nothing calls this directly

Calls 4

get_jni_envFunction · 0.85
parse_signatureFunction · 0.85
lua_to_jvalueFunction · 0.85
call_static_methodFunction · 0.85

Tested by

no test coverage detected