Changeset 20310 in webkit for trunk/JavaScriptCore/kjs/array_object.cpp
- Timestamp:
- Mar 18, 2007, 10:43:47 PM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/kjs/array_object.cpp
r17610 r20310 90 90 bool ArrayInstance::getOwnPropertySlot(ExecState* exec, const Identifier& propertyName, PropertySlot& slot) 91 91 { 92 if (propertyName == lengthPropertyName) {92 if (propertyName == exec->propertyNames().length) { 93 93 slot.setCustom(this, lengthGetter); 94 94 return true; … … 131 131 132 132 // Special implementation of [[Put]] - see ECMA 15.4.5.1 133 void ArrayInstance::put(ExecState *exec, const Identifier &propertyName, JSValue *value, int attr)134 { 135 if (propertyName == lengthPropertyName) {133 void ArrayInstance::put(ExecState* exec, const Identifier& propertyName, JSValue* value, int attr) 134 { 135 if (propertyName == exec->propertyNames().length) { 136 136 unsigned int newLen = value->toUInt32(exec); 137 137 if (value->toNumber(exec) != double(newLen)) { … … 179 179 } 180 180 181 bool ArrayInstance::deleteProperty(ExecState *exec, const Identifier &propertyName)182 { 183 if (propertyName == lengthPropertyName)181 bool ArrayInstance::deleteProperty(ExecState* exec, const Identifier &propertyName) 182 { 183 if (propertyName == exec->propertyNames().length) 184 184 return false; 185 185 … … 436 436 // ------------------------------ ArrayProtoFunc ---------------------------- 437 437 438 ArrayProtoFunc::ArrayProtoFunc(ExecState *exec, int i, int len, const Identifier& name)438 ArrayProtoFunc::ArrayProtoFunc(ExecState* exec, int i, int len, const Identifier& name) 439 439 : InternalFunctionImp(static_cast<FunctionPrototype*> 440 440 (exec->lexicalInterpreter()->builtinFunctionPrototype()), name) 441 441 , id(i) 442 442 { 443 put(exec, lengthPropertyName,jsNumber(len),DontDelete|ReadOnly|DontEnum);443 put(exec, exec->propertyNames().length, jsNumber(len), DontDelete | ReadOnly | DontEnum); 444 444 } 445 445 … … 453 453 454 454 // ECMA 15.4.4 455 JSValue *ArrayProtoFunc::callAsFunction(ExecState *exec, JSObject *thisObj, const List &args)456 { 457 unsigned length = thisObj->get(exec, lengthPropertyName)->toUInt32(exec);455 JSValue* ArrayProtoFunc::callAsFunction(ExecState* exec, JSObject* thisObj, const List& args) 456 { 457 unsigned length = thisObj->get(exec, exec->propertyNames().length)->toUInt32(exec); 458 458 459 459 JSValue *result = 0; // work around gcc 4.0 bug in uninitialized variable warning … … 488 488 if (id == ToLocaleString) { 489 489 JSObject* o = element->toObject(exec); 490 JSValue* conversionFunction = o->get(exec, toLocaleStringPropertyName);490 JSValue* conversionFunction = o->get(exec, exec->propertyNames().toLocaleString); 491 491 if (conversionFunction->isObject() && static_cast<JSObject*>(conversionFunction)->implementsCall()) 492 492 str += static_cast<JSObject*>(conversionFunction)->call(exec, o, List())->toString(exec); … … 518 518 // Older versions tried to optimize out getting the length of thisObj 519 519 // by checking for n != 0, but that doesn't work if thisObj is an empty array. 520 length = curObj->get(exec, lengthPropertyName)->toUInt32(exec);520 length = curObj->get(exec, exec->propertyNames().length)->toUInt32(exec); 521 521 while (k < length) { 522 522 if (JSValue *v = getProperty(exec, curObj, k)) … … 534 534 curObj = static_cast<JSObject *>(it++); // may be 0 535 535 } 536 arr->put(exec, lengthPropertyName, jsNumber(n), DontEnum | DontDelete);536 arr->put(exec, exec->propertyNames().length, jsNumber(n), DontEnum | DontDelete); 537 537 538 538 result = arr; … … 541 541 case Pop:{ 542 542 if (length == 0) { 543 thisObj->put(exec, lengthPropertyName, jsNumber(length), DontEnum | DontDelete);543 thisObj->put(exec, exec->propertyNames().length, jsNumber(length), DontEnum | DontDelete); 544 544 result = jsUndefined(); 545 545 } else { 546 546 result = thisObj->get(exec, length - 1); 547 thisObj->put(exec, lengthPropertyName, jsNumber(length - 1), DontEnum | DontDelete);547 thisObj->put(exec, exec->propertyNames().length, jsNumber(length - 1), DontEnum | DontDelete); 548 548 } 549 549 break; … … 553 553 thisObj->put(exec, length + n, args[n]); 554 554 length += args.size(); 555 thisObj->put(exec, lengthPropertyName, jsNumber(length), DontEnum | DontDelete);555 thisObj->put(exec, exec->propertyNames().length, jsNumber(length), DontEnum | DontDelete); 556 556 result = jsNumber(length); 557 557 break; … … 581 581 case Shift: { 582 582 if (length == 0) { 583 thisObj->put(exec, lengthPropertyName, jsNumber(length), DontEnum | DontDelete);583 thisObj->put(exec, exec->propertyNames().length, jsNumber(length), DontEnum | DontDelete); 584 584 result = jsUndefined(); 585 585 } else { … … 592 592 } 593 593 thisObj->deleteProperty(exec, length - 1); 594 thisObj->put(exec, lengthPropertyName, jsNumber(length - 1), DontEnum | DontDelete);594 thisObj->put(exec, exec->propertyNames().length, jsNumber(length - 1), DontEnum | DontDelete); 595 595 } 596 596 break; … … 635 635 resObj->put(exec, n, v); 636 636 } 637 resObj->put(exec, lengthPropertyName, jsNumber(n), DontEnum | DontDelete);637 resObj->put(exec, exec->propertyNames().length, jsNumber(n), DontEnum | DontDelete); 638 638 break; 639 639 } … … 662 662 663 663 if (length == 0) { 664 thisObj->put(exec, lengthPropertyName, jsNumber(0), DontEnum | DontDelete);664 thisObj->put(exec, exec->propertyNames().length, jsNumber(0), DontEnum | DontDelete); 665 665 result = thisObj; 666 666 break; … … 728 728 resObj->put(exec, k, v); 729 729 } 730 resObj->put(exec, lengthPropertyName, jsNumber(deleteCount), DontEnum | DontDelete);730 resObj->put(exec, exec->propertyNames().length, jsNumber(deleteCount), DontEnum | DontDelete); 731 731 732 732 unsigned int additionalArgs = maxInt( args.size() - 2, 0 ); … … 760 760 thisObj->put(exec, k+begin, args[k+2]); 761 761 } 762 thisObj->put(exec, lengthPropertyName, jsNumber(length - deleteCount + additionalArgs), DontEnum | DontDelete);762 thisObj->put(exec, exec->propertyNames().length, jsNumber(length - deleteCount + additionalArgs), DontEnum | DontDelete); 763 763 break; 764 764 } … … 775 775 thisObj->put(exec, k, args[k]); 776 776 result = jsNumber(length + nrArgs); 777 thisObj->put(exec, lengthPropertyName, result, DontEnum | DontDelete);777 thisObj->put(exec, exec->propertyNames().length, result, DontEnum | DontDelete); 778 778 break; 779 779 } … … 936 936 { 937 937 // ECMA 15.4.3.1 Array.prototype 938 put(exec, prototypePropertyName, arrayProto, DontEnum|DontDelete|ReadOnly);938 put(exec, exec->propertyNames().prototype, arrayProto, DontEnum|DontDelete|ReadOnly); 939 939 940 940 // no. of arguments for constructor 941 put(exec, lengthPropertyName, jsNumber(1), ReadOnly|DontDelete|DontEnum);941 put(exec, exec->propertyNames().length, jsNumber(1), ReadOnly|DontDelete|DontEnum); 942 942 } 943 943
Note:
See TracChangeset
for help on using the changeset viewer.