Ignore:
Timestamp:
Oct 25, 2007, 3:29:55 PM (18 years ago)
Author:
ggaren
Message:

Reviewed by Oliver Hunt.


Rolled out my last patch. It turns out that I needed 2 words, not 1,
so it didn't help.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/kjs/function.cpp

    r27068 r27072  
    391391// ------------------------------ ActivationImp --------------------------------
    392392
    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 
    415393const ClassInfo ActivationImp::info = {"Activation", 0, 0, 0};
    416394
     395// ECMA 10.1.6
     396ActivationImp::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
    417402JSValue* ActivationImp::argumentsGetter(ExecState* exec, JSObject*, const Identifier&, const PropertySlot& slot)
    418403{
    419404  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;
    421411}
    422412
     
    463453void ActivationImp::mark()
    464454{
    465     m_lazyArgumentsObject.mark();
     455    if (_function && !_function->marked())
     456        _function->mark();
     457    if (_argumentsObject && !_argumentsObject->marked())
     458        _argumentsObject->mark();
    466459    JSObject::mark();
     460}
     461
     462void 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();
    467467}
    468468
Note: See TracChangeset for help on using the changeset viewer.