Skip to content

Commit 6934703

Browse files
author
Wiki
committed
fix function
1 parent 1cc056f commit 6934703

File tree

3 files changed

+13
-15
lines changed

3 files changed

+13
-15
lines changed

quickjs-android/src/androidTest/java/com/quickjs/android/JSFunctionTest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,10 @@ public void tearDown() throws Exception {
2626

2727
@Test
2828
public void testJavaCallback() {
29-
context.set("intFunction", new JSFunction(context, (receiver, args) -> Integer.MAX_VALUE));
30-
context.set("doubleFunction", new JSFunction(context, (receiver, args) -> Double.MAX_VALUE));
31-
context.set("boolFunction", new JSFunction(context, (receiver, args) -> true));
32-
context.set("stringFunction", new JSFunction(context, (receiver, args) -> "Hello"));
29+
context.set("intFunction", new JSFunction(context, (JavaCallback) (receiver, array) -> Integer.MAX_VALUE));
30+
context.set("doubleFunction", new JSFunction(context, (JavaCallback) (receiver, args) -> Double.MAX_VALUE));
31+
context.set("boolFunction", new JSFunction(context, (JavaCallback) (receiver, args) -> true));
32+
context.set("stringFunction", new JSFunction(context, (JavaCallback) (receiver, args) -> "Hello"));
3333
assertEquals(Integer.MAX_VALUE, context.executeIntegerFunction("intFunction", null));
3434
assertEquals(Double.MAX_VALUE, context.executeDoubleFunction("doubleFunction", null), 1);
3535
assertTrue(context.executeBooleanFunction("boolFunction", null));

quickjs-android/src/main/cpp/quickjs-jni.cpp

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -202,10 +202,10 @@ JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *) {
202202
booleanInitMethodID = env->GetMethodID(booleanCls, "<init>", "(Z)V");
203203

204204
callJavaVoidCallbackMethodID = env->GetStaticMethodID(quickJSCls, "callJavaVoidCallback",
205-
"(JLcom/quickjs/android/JSValue;Lcom/quickjs/android/JSValue;Lcom/quickjs/android/JSArray;)V");
205+
"(Lcom/quickjs/android/JSValue;Lcom/quickjs/android/JSValue;Lcom/quickjs/android/JSArray;)V");
206206

207207
callJavaCallbackMethodID = env->GetStaticMethodID(quickJSCls, "callJavaCallback",
208-
"(JLcom/quickjs/android/JSValue;Lcom/quickjs/android/JSValue;Lcom/quickjs/android/JSArray;)Ljava/lang/Object;");
208+
"(Lcom/quickjs/android/JSValue;Lcom/quickjs/android/JSValue;Lcom/quickjs/android/JSArray;)Ljava/lang/Object;");
209209

210210
createJSValueMethodID = env->GetStaticMethodID(quickJSCls, "createJSValue",
211211
"(JIJIDJ)Lcom/quickjs/android/JSValue;");
@@ -447,16 +447,16 @@ callJavaCallback(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *
447447
JS_SetPropertyUint32(ctx, args, i, it);
448448
}
449449
}
450-
jlong contextPtr = reinterpret_cast<long>(ctx);
451450
jobject objectHandle = TO_JAVA_OBJECT(env, ctx, this_val);
452451
jobject functionHandle = TO_JAVA_OBJECT(env, ctx, func);
453452
jobject argsHandle = TO_JAVA_OBJECT(env, ctx, args);
454453
jobject result = env->CallStaticObjectMethod(quickJSCls, callJavaCallbackMethodID,
455-
contextPtr,
456454
objectHandle,
457455
functionHandle,
458456
argsHandle);
459-
if (env->IsInstanceOf(result, integerCls)) {
457+
if (result == nullptr) {
458+
return JS_NULL;
459+
} else if (env->IsInstanceOf(result, integerCls)) {
460460
return JS_NewInt32(ctx, env->CallIntMethod(result, intValueMethodID));
461461
} else if (env->IsInstanceOf(result, doubleCls)) {
462462
return JS_NewFloat64(ctx, env->CallDoubleMethod(result, doubleValueMethodID));
@@ -483,12 +483,10 @@ callJavaVoidCallback(JSContext *ctx, JSValueConst this_val, int argc, JSValueCon
483483
JS_SetPropertyUint32(ctx, args, i, it);
484484
}
485485
}
486-
jlong contextPtr = reinterpret_cast<long>(ctx);
487486
jobject objectHandle = TO_JAVA_OBJECT(env, ctx, this_val);
488487
jobject functionHandle = TO_JAVA_OBJECT(env, ctx, func);
489488
jobject argsHandle = TO_JAVA_OBJECT(env, ctx, args);
490489
env->CallStaticVoidMethod(quickJSCls, callJavaVoidCallbackMethodID,
491-
contextPtr,
492490
objectHandle,
493491
functionHandle,
494492
argsHandle);

quickjs-android/src/main/java/com/quickjs/android/QuickJS.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@ static class MethodDescriptor {
4242

4343

4444
@Keep
45-
static void callJavaVoidCallback(long contextPtr, JSValue objectHandle, JSValue functionHandle, JSArray argsHandle) {
46-
JSContext context = sContextMap.get(contextPtr);
45+
static void callJavaVoidCallback(JSValue objectHandle, JSValue functionHandle, JSArray argsHandle) {
46+
JSContext context = sContextMap.get(functionHandle.context.getContextPtr());
4747
if (context == null) {
4848
return;
4949
}
@@ -57,8 +57,8 @@ static void callJavaVoidCallback(long contextPtr, JSValue objectHandle, JSValue
5757
}
5858

5959
@Keep
60-
static Object callJavaCallback(long contextPtr, JSValue objectHandle, JSValue functionHandle, JSArray argsHandle) {
61-
JSContext context = sContextMap.get(contextPtr);
60+
static Object callJavaCallback(JSValue objectHandle, JSValue functionHandle, JSArray argsHandle) {
61+
JSContext context = sContextMap.get(functionHandle.context.getContextPtr());
6262
if (context == null) {
6363
return null;
6464
}

0 commit comments

Comments
 (0)