]> git.saurik.com Git - cycript.git/commitdiff
JSObjectMakeArray fallback didn't handle length 1.
authorJay Freeman (saurik) <saurik@saurik.com>
Sat, 9 Jan 2016 15:04:45 +0000 (07:04 -0800)
committerJay Freeman (saurik) <saurik@saurik.com>
Sat, 9 Jan 2016 15:04:45 +0000 (07:04 -0800)
Execute.cpp

index 48dc4780d8924538f8ac01af90bef4ac5647a57b..3399c86fb644db7d9022db7729245bb0d0056253 100644 (file)
@@ -181,11 +181,12 @@ static JSObjectRef (*JSObjectMakeArray$)(JSContextRef, size_t, const JSValueRef[
 JSObjectRef CYObjectMakeArray(JSContextRef context, size_t length, const JSValueRef values[]) {
     if (JSObjectMakeArray$ != NULL)
         return _jsccall(*JSObjectMakeArray$, context, length, values);
-    else {
-        JSObjectRef Array(CYGetCachedObject(context, CYJSString("Array")));
-        JSValueRef value(CYCallAsFunction(context, Array, NULL, length, values));
-        return CYCastJSObject(context, value);
-    }
+    JSObjectRef Array(CYGetCachedObject(context, CYJSString("Array")));
+    bool wat(length == 1 && JSValueGetType(context, values[0]) == kJSTypeNumber);
+    JSValueRef value(CYCallAsFunction(context, Array, NULL, wat ? 0 : length, values));
+    JSObjectRef object(CYCastJSObject(context, value));
+    if (wat) CYArrayPush(context, object, 1, values);
+    return object;
 }
 
 static JSClassRef All_;