Ignore:
Timestamp:
Sep 28, 2008, 8:04:08 PM (17 years ago)
Author:
[email protected]
Message:

2008-09-28 Cameron Zwarich <[email protected]>

Reviewed by Maciej Stachowiak.

Bug 21200: Allow direct access to 'arguments' without using op_resolve
<https://bugs.webkit.org/show_bug.cgi?id=21200>

Allow fast access to the 'arguments' object by adding an extra slot to
the callframe to store it.

  • JavaScriptCore.exp:
  • VM/CTI.cpp: (JSC::CTI::privateCompileMainPass):
  • VM/CodeBlock.cpp: (JSC::CodeBlock::dump):
  • VM/CodeGenerator.cpp: (JSC::CodeGenerator::CodeGenerator): (JSC::CodeGenerator::registerFor):
  • VM/CodeGenerator.h: (JSC::CodeGenerator::registerFor):
  • VM/Machine.cpp: (JSC::Machine::initializeCallFrame): (JSC::Machine::dumpRegisters): (JSC::Machine::privateExecute): (JSC::Machine::retrieveArguments): (JSC::Machine::cti_op_call_JSFunction): (JSC::Machine::cti_op_create_arguments): (JSC::Machine::cti_op_construct_JSConstruct):
  • VM/Machine.h:
  • VM/Opcode.h:
  • VM/RegisterFile.h: (JSC::RegisterFile::):
  • kjs/JSActivation.cpp: (JSC::JSActivation::mark): (JSC::JSActivation::argumentsGetter):
  • kjs/JSActivation.h: (JSC::JSActivation::JSActivationData::JSActivationData):
  • kjs/NodeInfo.h:
  • kjs/Parser.cpp: (JSC::Parser::didFinishParsing):
  • kjs/Parser.h: (JSC::Parser::parse):
  • kjs/grammar.y:
  • kjs/nodes.cpp: (JSC::ScopeNode::ScopeNode): (JSC::ProgramNode::ProgramNode): (JSC::ProgramNode::create): (JSC::EvalNode::EvalNode): (JSC::EvalNode::create): (JSC::FunctionBodyNode::FunctionBodyNode): (JSC::FunctionBodyNode::create):
  • kjs/nodes.h: (JSC::ScopeNode::usesArguments):
File:
1 edited

Legend:

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

    r36851 r37050  
    5353{
    5454    Base::mark();
    55    
    56     if (d()->argumentsObject)
    57         d()->argumentsObject->mark();
    5855
    5956    Register* registerArray = d()->registerArray.get();
     
    163160{
    164161    JSActivation* thisObj = static_cast<JSActivation*>(slot.slotBase());
    165     if (!thisObj->d()->argumentsObject)
    166         thisObj->d()->argumentsObject = thisObj->createArgumentsObject(exec);
    167162
    168     return thisObj->d()->argumentsObject;
     163    Arguments* arguments = static_cast<Arguments*>(thisObj->d()->registers[RegisterFile::OptionalCalleeArguments].jsValue(exec));
     164    if (!arguments) {
     165        arguments = thisObj->createArgumentsObject(exec);
     166        thisObj->d()->registers[RegisterFile::OptionalCalleeArguments] = arguments;
     167    }
     168
     169    return arguments;
    169170}
    170171
Note: See TracChangeset for help on using the changeset viewer.