• mjs@apple.com's avatar
    JavaScriptCore: · ebfb09bc
    mjs@apple.com authored
            Reviewed by Maciej.
    
            Optimized ActivationImp allocation, so that activation records are now
            first allocated on an explicitly managed stack and only heap allocated
            when necessary. Roughly a 5% improvement on SunSpider, and a larger
            improvement on benchmarks that use more function calls.
    
            * JavaScriptCore.xcodeproj/project.pbxproj:
            * kjs/Activation.h: Added.
            (KJS::ActivationImp::ActivationData::ActivationData):
            (KJS::ActivationImp::ActivationImp):
            (KJS::ActivationImp::classInfo):
            (KJS::ActivationImp::isActivationObject):
            (KJS::ActivationImp::isOnStack):
            (KJS::ActivationImp::d):
            (KJS::StackActivation::StackActivation):
            * kjs/ExecState.cpp:
            (KJS::ExecState::ExecState):
            (KJS::ExecState::~ExecState):
            * kjs/ExecState.h:
            (KJS::ExecState::replaceScopeChainTop):
            (KJS::ExecState::setActivationObject):
            (KJS::ExecState::setLocalStorage):
            * kjs/JSGlobalObject.cpp:
            (KJS::JSGlobalObject::reset):
            (KJS::JSGlobalObject::pushActivation):
            (KJS::JSGlobalObject::checkActivationCount):
            (KJS::JSGlobalObject::popActivationHelper):
            (KJS::JSGlobalObject::popActivation):
            (KJS::JSGlobalObject::tearOffActivation):
            * kjs/JSGlobalObject.h:
            * kjs/JSVariableObject.h:
            (KJS::JSVariableObject::JSVariableObjectData::JSVariableObjectData):
            (KJS::JSVariableObject::JSVariableObject):
            * kjs/function.cpp:
            (KJS::FunctionImp::argumentsGetter):
            (KJS::ActivationImp::ActivationImp):
            (KJS::ActivationImp::~ActivationImp):
            (KJS::ActivationImp::init):
            (KJS::ActivationImp::getOwnPropertySlot):
            (KJS::ActivationImp::markHelper):
            (KJS::ActivationImp::mark):
            (KJS::ActivationImp::ActivationData::ActivationData):
            (KJS::GlobalFuncImp::callAsFunction):
            * kjs/function.h:
            * kjs/nodes.cpp:
            (KJS::PostIncResolveNode::evaluate):
            (KJS::PostDecResolveNode::evaluate):
            (KJS::PreIncResolveNode::evaluate):
            (KJS::PreDecResolveNode::evaluate):
            (KJS::ReadModifyResolveNode::evaluate):
            (KJS::AssignResolveNode::evaluate):
            (KJS::WithNode::execute):
            (KJS::TryNode::execute):
            (KJS::FunctionBodyNode::processDeclarations):
            (KJS::FuncExprNode::evaluate):
            * kjs/object.h:
            * kjs/scope_chain.h:
            (KJS::ScopeChain::replace):
            * kjs/scope_chain_mark.h: Added.
            (KJS::ScopeChain::mark):
    
    WebCore:
    
            Reviewed by Maciej.
    
            Added a new forwarding header, because Activation.h has been separated
            from function.h
    
            * ForwardingHeaders/kjs/Activation.h: Added.
    
    LayoutTests:
    
            Reviewed by Maciej.
    
            Added a test case that came up when developing the ActivationImp tear-off.
    
            * fast/js/resources/vardecl-preserve-arguments.js:
            * fast/js/vardecl-preserve-arguments-expected.txt:
    
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@29425 268f45cc-cd09-0410-ab3c-d52691b4dbfc
    ebfb09bc