Changeset 11785 in webkit for trunk/JavaScriptCore/kjs/array_object.cpp
- Timestamp:
- Dec 27, 2005, 12:02:01 PM (19 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/kjs/array_object.cpp
r11775 r11785 390 390 splice ArrayProtoFunc::Splice DontEnum|Function 2 391 391 unshift ArrayProtoFunc::UnShift DontEnum|Function 1 392 every ArrayProtoFunc::Every DontEnum|Function 5 393 forEach ArrayProtoFunc::ForEach DontEnum|Function 5 394 some ArrayProtoFunc::Some DontEnum|Function 5 395 indexOf ArrayProtoFunc::IndexOf DontEnum|Function 1 392 every ArrayProtoFunc::Every DontEnum|Function 1 393 forEach ArrayProtoFunc::ForEach DontEnum|Function 1 394 some ArrayProtoFunc::Some DontEnum|Function 1 395 indexOf ArrayProtoFunc::IndexOf DontEnum|Function 1 396 filter ArrayProtoFunc::Filter DontEnum|Function 1 397 map ArrayProtoFunc::Map DontEnum|Function 1 396 398 @end 397 399 */ … … 771 773 break; 772 774 } 775 case Filter: 776 case Map: { 777 JSObject *eachFunction = args[0]->toObject(exec); 778 779 if (!eachFunction->implementsCall()) 780 return throwError(exec, TypeError); 781 782 JSObject *applyThis = args[1]->isUndefinedOrNull() ? exec->dynamicInterpreter()->globalObject() : args[1]->toObject(exec); 783 JSObject *resultArray; 784 785 if (id == Filter) 786 resultArray = static_cast<JSObject *>(exec->lexicalInterpreter()->builtinArray()->construct(exec, List::empty())); 787 else 788 { 789 List args; 790 args.append(jsNumber(length)); 791 resultArray = static_cast<JSObject *>(exec->lexicalInterpreter()->builtinArray()->construct(exec, args)); 792 } 793 794 unsigned filterIndex = 0; 795 for (unsigned k = 0; k < length && !exec->hadException(); ++k) { 796 PropertySlot slot; 797 798 if (!thisObj->getPropertySlot(exec, k, slot)) 799 continue; 800 801 JSValue *v = slot.getValue(exec, thisObj, k); 802 803 List eachArguments; 804 805 eachArguments.append(v); 806 eachArguments.append(jsNumber(k)); 807 eachArguments.append(thisObj); 808 809 JSValue *result = eachFunction->call(exec, applyThis, eachArguments); 810 811 if (id == Map) 812 resultArray->put(exec, k, result); 813 else if (result->toBoolean(exec)) 814 resultArray->put(exec, filterIndex++, v); 815 } 816 817 return resultArray; 818 } 773 819 case Every: 774 820 case ForEach: … … 792 838 793 839 for (unsigned k = 0; k < length && !exec->hadException(); ++k) { 840 PropertySlot slot; 841 842 if (!thisObj->getPropertySlot(exec, k, slot)) 843 continue; 794 844 795 845 List eachArguments; 796 846 797 eachArguments.append( thisObj->get(exec, k));847 eachArguments.append(slot.getValue(exec, thisObj, k)); 798 848 eachArguments.append(jsNumber(k)); 799 849 eachArguments.append(thisObj);
Note:
See TracChangeset
for help on using the changeset viewer.