Changeset 30041 in webkit for trunk/JavaScriptCore/kjs/array_object.cpp
- Timestamp:
- Feb 6, 2008, 9:40:16 AM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/kjs/array_object.cpp
r30040 r30041 249 249 ++it; 250 250 } 251 arr->put(exec, exec->propertyNames().length, jsNumber(n) , DontEnum | DontDelete);251 arr->put(exec, exec->propertyNames().length, jsNumber(n)); 252 252 return arr; 253 253 } … … 258 258 unsigned length = thisObj->get(exec, exec->propertyNames().length)->toUInt32(exec); 259 259 if (length == 0) { 260 thisObj->put(exec, exec->propertyNames().length, jsNumber(length) , DontEnum | DontDelete);260 thisObj->put(exec, exec->propertyNames().length, jsNumber(length)); 261 261 result = jsUndefined(); 262 262 } else { 263 263 result = thisObj->get(exec, length - 1); 264 thisObj->put(exec, exec->propertyNames().length, jsNumber(length - 1), DontEnum | DontDelete); 264 thisObj->deleteProperty(exec, length - 1); 265 thisObj->put(exec, exec->propertyNames().length, jsNumber(length - 1)); 265 266 } 266 267 return result; … … 273 274 thisObj->put(exec, length + n, args[n]); 274 275 length += args.size(); 275 thisObj->put(exec, exec->propertyNames().length, jsNumber(length) , DontEnum | DontDelete);276 thisObj->put(exec, exec->propertyNames().length, jsNumber(length)); 276 277 return jsNumber(length); 277 278 } … … 306 307 unsigned length = thisObj->get(exec, exec->propertyNames().length)->toUInt32(exec); 307 308 if (length == 0) { 308 thisObj->put(exec, exec->propertyNames().length, jsNumber(length) , DontEnum | DontDelete);309 thisObj->put(exec, exec->propertyNames().length, jsNumber(length)); 309 310 result = jsUndefined(); 310 311 } else { … … 317 318 } 318 319 thisObj->deleteProperty(exec, length - 1); 319 thisObj->put(exec, exec->propertyNames().length, jsNumber(length - 1) , DontEnum | DontDelete);320 thisObj->put(exec, exec->propertyNames().length, jsNumber(length - 1)); 320 321 } 321 322 return result; … … 361 362 resObj->put(exec, n, v); 362 363 } 363 resObj->put(exec, exec->propertyNames().length, jsNumber(n) , DontEnum | DontDelete);364 resObj->put(exec, exec->propertyNames().length, jsNumber(n)); 364 365 return result; 365 366 } … … 384 385 unsigned length = thisObj->get(exec, exec->propertyNames().length)->toUInt32(exec); 385 386 386 if (!length) { 387 thisObj->put(exec, exec->propertyNames().length, jsNumber(0), DontEnum | DontDelete); 387 if (!length) 388 388 return thisObj; 389 }390 389 391 390 // "Min" sort. Not the fastest, but definitely less code than heapsort 392 391 // or quicksort, and much less swapping than bubblesort/insertionsort. 393 for (unsigned i = 0 ; i < length - 1; ++i) {392 for (unsigned i = 0; i < length - 1; ++i) { 394 393 JSValue* iObj = thisObj->get(exec, i); 395 394 unsigned themin = i; 396 395 JSValue* minObj = iObj; 397 for (unsigned j = i + 1 ; j < length; ++j) {396 for (unsigned j = i + 1; j < length; ++j) { 398 397 JSValue* jObj = thisObj->get(exec, j); 399 398 double compareResult; … … 448 447 resObj->put(exec, k, v); 449 448 } 450 resObj->put(exec, exec->propertyNames().length, jsNumber(deleteCount) , DontEnum | DontDelete);449 resObj->put(exec, exec->propertyNames().length, jsNumber(deleteCount)); 451 450 452 451 unsigned additionalArgs = std::max<int>(args.size() - 2, 0); … … 459 458 thisObj->deleteProperty(exec, k + additionalArgs); 460 459 } 461 for (unsigned k = length 460 for (unsigned k = length; k > length - deleteCount + additionalArgs; --k) 462 461 thisObj->deleteProperty(exec, k - 1); 463 462 } else { … … 473 472 thisObj->put(exec, k + begin, args[k + 2]); 474 473 475 thisObj->put(exec, exec->propertyNames().length, jsNumber(length - deleteCount + additionalArgs) , DontEnum | DontDelete);474 thisObj->put(exec, exec->propertyNames().length, jsNumber(length - deleteCount + additionalArgs)); 476 475 return result; 477 476 } … … 482 481 unsigned length = thisObj->get(exec, exec->propertyNames().length)->toUInt32(exec); 483 482 unsigned nrArgs = args.size(); 484 for (unsigned k = length; k > 0; --k) { 485 if (JSValue* v = getProperty(exec, thisObj, k - 1)) 486 thisObj->put(exec, k + nrArgs-1, v); 487 else 488 thisObj->deleteProperty(exec, k + nrArgs-1); 483 if (nrArgs) { 484 for (unsigned k = length; k > 0; --k) { 485 if (JSValue* v = getProperty(exec, thisObj, k - 1)) 486 thisObj->put(exec, k + nrArgs - 1, v); 487 else 488 thisObj->deleteProperty(exec, k + nrArgs - 1); 489 } 489 490 } 490 491 for (unsigned k = 0; k < nrArgs; ++k) 491 492 thisObj->put(exec, k, args[k]); 492 493 JSValue* result = jsNumber(length + nrArgs); 493 thisObj->put(exec, exec->propertyNames().length, result , DontEnum | DontDelete);494 thisObj->put(exec, exec->propertyNames().length, result); 494 495 return result; 495 496 }
Note:
See TracChangeset
for help on using the changeset viewer.