Skip to content

Commit 6ea30c9

Browse files
author
Wiki
committed
fix
1 parent b0180ee commit 6ea30c9

File tree

5 files changed

+54
-21
lines changed

5 files changed

+54
-21
lines changed

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

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -69,15 +69,13 @@ public void call3() {
6969
context.registerJavaMethod(new JavaCallback() {
7070
@Override
7171
public Object invoke(JSArray array) {
72-
return array.getString(0);
72+
return array.getDouble(1);
7373
}
7474
}, "test");
7575
JSFunction function = (JSFunction) context.getObject("test");
76-
JSArray args = new JSArray(context);
77-
args.push("Hello");
78-
args.push(3.14);
79-
String result = (String) function.call(context, args);
80-
assertEquals("Hello", result);
76+
JSArray parameters = new JSArray(context).push("Hello").push(3.14);
77+
Object result = function.call(context, parameters);
78+
assertEquals(3.14, result);
8179
}
8280

8381

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

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ jobject TO_JAVA_OBJECT(JNIEnv *env, JSContext *ctx, JSValue value) {
111111
}
112112

113113

114-
int getObjectType(JSContext *ctx, JSValue result) {
114+
int GetObjectType(JSContext *ctx, JSValue result) {
115115
if (JS_IsArray(ctx, result)) {
116116
return TYPE_JS_ARRAY;
117117
} else if (JS_IsFunction(ctx, result)) {
@@ -130,14 +130,22 @@ int getObjectType(JSContext *ctx, JSValue result) {
130130
return TYPE_NULL;
131131
} else if (JS_IsUndefined(result)) {
132132
return TYPE_UNDEFINED;
133+
} else if (JS_IsNumber(result)) {
134+
int tag = JS_VALUE_GET_TAG(result);
135+
if (tag == JS_TAG_INT) {
136+
return TYPE_INTEGER;
137+
}
138+
if (JS_TAG_IS_FLOAT64(tag)) {
139+
return TYPE_DOUBLE;
140+
}
133141
}
134142
return TYPE_UNKNOWN;
135143
}
136144

137145
jobject To_JObject(JNIEnv *env, jlong context_ptr, int expected_type, JSValue result) {
138146
auto *ctx = reinterpret_cast<JSContext *>(context_ptr);
139147
if (expected_type == TYPE_UNKNOWN) {
140-
expected_type = getObjectType(ctx, result);
148+
expected_type = GetObjectType(ctx, result);
141149
}
142150
switch (expected_type) {
143151
case TYPE_NULL:
@@ -350,7 +358,7 @@ Java_com_quickjs_android_QuickJS__1executeFunction2(JNIEnv *env, jclass clazz, j
350358
JSValue func_obj = TO_JS_VALUE(env, functionHandle);
351359
JSValue *argv = nullptr;
352360
int argc = 0;
353-
if (parameters_handle != 0) {
361+
if (parameters_handle != nullptr) {
354362
JSValue argArray = TO_JS_VALUE(env, parameters_handle);
355363
argc = JS_VALUE_GET_INT(JS_GetPropertyStr(ctx, argArray, "length"));
356364
argv = new JSValue[argc];
@@ -490,7 +498,7 @@ Java_com_quickjs_android_QuickJS__1getObjectType(JNIEnv *env, jclass clazz, jlon
490498
jobject object_handle) {
491499
auto *ctx = reinterpret_cast<JSContext *>(context_ptr);
492500
JSValue value = TO_JS_VALUE(env, object_handle);
493-
return getObjectType(ctx, value);
501+
return GetObjectType(ctx, value);
494502
}
495503
extern "C"
496504
JNIEXPORT void JNICALL

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@ public JSFunction(JSContext context, long tag, int u_int32, double u_float64, lo
1616
}
1717

1818
public Object call(JSObject receiver, JSArray parameters) {
19-
return QuickJS.executeFunction2(context, JSValue.UNKNOWN, receiver, this, parameters);
19+
if (receiver == null) {
20+
receiver = context;
21+
}
22+
return QuickJS._executeFunction2(context.getContextPtr(), JSValue.UNKNOWN, receiver, this, parameters);
2023
}
2124
}

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

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -123,27 +123,51 @@ public Object executeFunction(String name, JSArray parameters) {
123123
}
124124

125125
public int executeIntegerFunction(String name, JSArray parameters) {
126-
return (int) executeFunction(JSValue.INTEGER, name, parameters);
126+
Object result = executeFunction(JSValue.INTEGER, name, parameters);
127+
if (result instanceof Integer) {
128+
return (int) result;
129+
}
130+
return 0;
127131
}
128132

129133
public double executeDoubleFunction(String name, JSArray parameters) {
130-
return (double) executeFunction(JSValue.DOUBLE, name, parameters);
134+
Object result = executeFunction(JSValue.DOUBLE, name, parameters);
135+
if (result instanceof Double) {
136+
return (double) result;
137+
}
138+
return 0;
131139
}
132140

133141
public boolean executeBooleanFunction(String name, JSArray parameters) {
134-
return (boolean) executeFunction(JSValue.BOOLEAN, name, parameters);
142+
Object result = executeFunction(JSValue.BOOLEAN, name, parameters);
143+
if (result instanceof Boolean) {
144+
return (boolean) result;
145+
}
146+
return false;
135147
}
136148

137149
public String executeStringFunction(String name, JSArray parameters) {
138-
return (String) executeFunction(JSValue.STRING, name, parameters);
150+
Object result = executeFunction(JSValue.STRING, name, parameters);
151+
if (result instanceof String) {
152+
return (String) result;
153+
}
154+
return null;
139155
}
140156

141157
public JSArray executeArrayFunction(String name, JSArray parameters) {
142-
return (JSArray) executeFunction(JSValue.JS_ARRAY, name, parameters);
158+
Object result = executeFunction(JSValue.JS_ARRAY, name, parameters);
159+
if (result instanceof JSArray) {
160+
return (JSArray) result;
161+
}
162+
return null;
143163
}
144164

145165
public JSObject executeObjectFunction(String name, JSArray parameters) {
146-
return (JSObject) executeFunction(JSValue.JS_OBJECT, name, parameters);
166+
Object result = executeFunction(JSValue.JS_OBJECT, name, parameters);
167+
if (result instanceof JSObject) {
168+
return (JSObject) result;
169+
}
170+
return null;
147171
}
148172

149173
public void executeVoidFunction(String name, JSArray parameters) {

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,9 +71,9 @@ static Object executeFunction(JSContext context, int expectedType, JSValue objec
7171
return _executeFunction(context.getContextPtr(), expectedType, objectHandle, name, parametersHandle);
7272
}
7373

74-
static Object executeFunction2(JSContext context, int expectedType, JSValue objectHandle, JSValue functionHandle, JSValue parametersHandle) {
75-
return _executeFunction2(context.getContextPtr(), expectedType, objectHandle, functionHandle, parametersHandle);
76-
}
74+
// static Object executeFunction2(JSContext context, int expectedType, JSValue objectHandle, JSValue functionHandle, JSValue parametersHandle) {
75+
// return _executeFunction2(context.getContextPtr(), expectedType, objectHandle, functionHandle, parametersHandle);
76+
// }
7777

7878

7979
static Object executeJSFunction(JSContext context, JSValue objectHandle, String name, Object[] parameters) {
@@ -120,7 +120,7 @@ static Object executeJSFunction(JSContext context, JSValue objectHandle, String
120120

121121
private static native Object _executeFunction(long contextPtr, int expectedType, JSValue objectHandle, String name, JSValue parametersHandle);
122122

123-
private static native Object _executeFunction2(long contextPtr, int expectedType, JSValue objectHandle, JSValue functionHandle, JSValue parametersHandle);
123+
static native Object _executeFunction2(long contextPtr, int expectedType, JSValue objectHandle, JSValue functionHandle, JSValue parametersHandle);
124124

125125
static native JSObject _initNewJSObject(long contextPtr);
126126

0 commit comments

Comments
 (0)