MCPcopy Create free account
hub / github.com/9miao/CrossApp / jsval_to_ccarray

Function jsval_to_ccarray

scripting/javascript/bindings/ScriptingCore.cpp:1296–1365  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1294
1295
1296JSBool jsval_to_ccarray(JSContext* cx, jsval v, CCArray** ret) {
1297 JSObject *jsobj;
1298 JSBool ok = v.isObject() && JS_ValueToObject( cx, v, &jsobj );
1299 JSB_PRECONDITION3( ok, cx, JS_FALSE, "Error converting value to object");
1300 JSB_PRECONDITION3( jsobj && JS_IsArrayObject( cx, jsobj), cx, JS_FALSE, "Object must be an array");
1301
1302 uint32_t len = 0;
1303 JS_GetArrayLength(cx, jsobj, &len);
1304 CCArray* arr = CCArray::createWithCapacity(len);
1305 for (uint32_t i=0; i < len; i++) {
1306 jsval value;
1307 if (JS_GetElement(cx, jsobj, i, &value)) {
1308 if (value.isObject())
1309 {
1310 js_proxy_t *proxy;
1311 JSObject *tmp = JSVAL_TO_OBJECT(value);
1312 proxy = jsb_get_js_proxy(tmp);
1313 CAObject* cobj = (CAObject *)(proxy ? proxy->ptr : NULL);
1314 // Don't test it.
1315 //TEST_NATIVE_OBJECT(cx, cobj)
1316 if (cobj) {
1317 // It's a native js object.
1318 arr->addObject(cobj);
1319 }
1320 else if (!JS_IsArrayObject(cx, tmp)){
1321 // It's a normal js object.
1322 CCDictionary* dictVal = NULL;
1323 JSBool ok = jsval_to_ccdictionary(cx, value, &dictVal);
1324 if (ok) {
1325 arr->addObject(dictVal);
1326 }
1327 }
1328 else {
1329 // It's a js array object.
1330 CCArray* arrVal = NULL;
1331 JSBool ok = jsval_to_ccarray(cx, value, &arrVal);
1332 if (ok) {
1333 arr->addObject(arrVal);
1334 }
1335 }
1336 }
1337 else if (JSVAL_IS_STRING(value)) {
1338 JSStringWrapper valueWapper(JSVAL_TO_STRING(value), cx);
1339 arr->addObject(CCString::create(valueWapper.get()));
1340// CCLOG("iterate array: value = %s", valueWapper.get().c_str());
1341 }
1342 else if (JSVAL_IS_NUMBER(value)) {
1343 double number = 0.0;
1344 JSBool ok = JS_ValueToNumber(cx, value, &number);
1345 if (ok) {
1346 arr->addObject(CCString::createWithFormat("%f",number));
1347// CCLOG("iterate array: value = %lf", number);
1348 }
1349 }
1350 else if (JSVAL_IS_BOOLEAN(value)) {
1351 JSBool boolVal = JS_FALSE;
1352 JSBool ok = JS_ValueToBoolean(cx, value, &boolVal);
1353 if (ok) {

Calls 10

jsb_get_js_proxyFunction · 0.85
jsval_to_ccdictionaryFunction · 0.85
JSVAL_TO_OBJECTFunction · 0.50
JSVAL_IS_STRINGFunction · 0.50
JSVAL_TO_STRINGFunction · 0.50
JSVAL_IS_NUMBERFunction · 0.50
JSVAL_IS_BOOLEANFunction · 0.50
isObjectMethod · 0.45
addObjectMethod · 0.45
getMethod · 0.45