Changeset 27068 in webkit for trunk/JavaScriptCore/kjs/function.cpp
- Timestamp:
- Oct 25, 2007, 2:37:45 PM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/kjs/function.cpp
r27025 r27068 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, so 398 // discard it now. This prevents lists of Lists from building up, waiting 399 // 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 else 409 o = function(); 410 411 if (!o->marked()) 412 o->mark(); 413 } 414 393 415 const ClassInfo ActivationImp::info = {"Activation", 0, 0, 0}; 394 416 395 // ECMA 10.1.6396 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 402 417 JSValue* ActivationImp::argumentsGetter(ExecState* exec, JSObject*, const Identifier&, const PropertySlot& slot) 403 418 { 404 419 ActivationImp* thisObj = static_cast<ActivationImp*>(slot.slotBase()); 405 406 // default: return builtin arguments array 407 if (!thisObj->_argumentsObject) 408 thisObj->createArgumentsObject(exec); 409 410 return thisObj->_argumentsObject; 420 return thisObj->m_lazyArgumentsObject.getOrCreate(exec, thisObj); 411 421 } 412 422 … … 453 463 void ActivationImp::mark() 454 464 { 455 if (_function && !_function->marked()) 456 _function->mark(); 457 if (_argumentsObject && !_argumentsObject->marked()) 458 _argumentsObject->mark(); 465 m_lazyArgumentsObject.mark(); 459 466 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 now466 _arguments.reset();467 467 } 468 468
Note:
See TracChangeset
for help on using the changeset viewer.