Changeset 27072 in webkit for trunk/JavaScriptCore/kjs/function.cpp
- Timestamp:
- Oct 25, 2007, 3:29:55 PM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/kjs/function.cpp
r27068 r27072 391 391 // ------------------------------ ActivationImp -------------------------------- 392 392 393 void ActivationImp::LazyArgumentsObject::createArgumentsObject(ExecState* exec, ActivationImp* activationImp)394 {395 setArgumentsObject(new Arguments(exec, function(), arguments, activationImp));396 397 // The arguments list is only needed to create the arguments object, so398 // discard it now. This prevents lists of Lists from building up, waiting399 // to be garbage collected.400 arguments.reset();401 }402 403 void ActivationImp::LazyArgumentsObject::mark()404 {405 JSObject* o;406 if (createdArgumentsObject())407 o = argumentsObject();408 else409 o = function();410 411 if (!o->marked())412 o->mark();413 }414 415 393 const ClassInfo ActivationImp::info = {"Activation", 0, 0, 0}; 416 394 395 // ECMA 10.1.6 396 ActivationImp::ActivationImp(FunctionImp* function, const List& arguments) 397 : _function(function), _arguments(arguments), _argumentsObject(0) 398 { 399 // FIXME: Do we need to support enumerating the arguments property? 400 } 401 417 402 JSValue* ActivationImp::argumentsGetter(ExecState* exec, JSObject*, const Identifier&, const PropertySlot& slot) 418 403 { 419 404 ActivationImp* thisObj = static_cast<ActivationImp*>(slot.slotBase()); 420 return thisObj->m_lazyArgumentsObject.getOrCreate(exec, thisObj); 405 406 // default: return builtin arguments array 407 if (!thisObj->_argumentsObject) 408 thisObj->createArgumentsObject(exec); 409 410 return thisObj->_argumentsObject; 421 411 } 422 412 … … 463 453 void ActivationImp::mark() 464 454 { 465 m_lazyArgumentsObject.mark(); 455 if (_function && !_function->marked()) 456 _function->mark(); 457 if (_argumentsObject && !_argumentsObject->marked()) 458 _argumentsObject->mark(); 466 459 JSObject::mark(); 460 } 461 462 void ActivationImp::createArgumentsObject(ExecState* exec) 463 { 464 _argumentsObject = new Arguments(exec, _function, _arguments, const_cast<ActivationImp*>(this)); 465 // The arguments list is only needed to create the arguments object, so discard it now 466 _arguments.reset(); 467 467 } 468 468
Note:
See TracChangeset
for help on using the changeset viewer.