Changeset 26811 in webkit for trunk/JavaScriptCore/kjs/nodes.cpp


Ignore:
Timestamp:
Oct 20, 2007, 12:11:53 AM (18 years ago)
Author:
ggaren
Message:

Reviewed by Maciej Stachowiak.

Fixed http://bugs.webkit.org/show_bug.cgi?id=15570
Store gathered declaration nodes in the function body node.


This means that you only have to gather the declaration nodes the first
time the function executes. Performance gain of 2.10% on SunSpider,
0.90% on command-line JS iBench.

  • kjs/nodes.cpp: Split declaration stack initialization code off into initializeDeclarationStacks(). (FunctionBodyNode::FunctionBodyNode): (FunctionBodyNode::initializeDeclarationStacks): (FunctionBodyNode::processDeclarations):
  • kjs/nodes.h: Changed DeclarationStacks structure to hold references, since the actual Vectors are now stored either on the stack or in the function body node.
File:
1 edited

Legend:

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

    r26808 r26811  
    24232423    , m_sourceURL(Lexer::curr()->sourceURL())
    24242424    , m_sourceId(Parser::sid)
    2425 {
    2426 
     2425    , m_initializedDeclarationStacks(false)
     2426{
    24272427  setLoc(-1, -1);
    24282428}
    24292429
    2430 void FunctionBodyNode::processDeclarations(ExecState* exec)
     2430void FunctionBodyNode::initializeDeclarationStacks()
    24312431{
    24322432    Node* node = source.get();
     
    24342434        return;
    24352435
    2436     DeclarationStacks stacks;
    2437     DeclarationStacks::NodeStack& nodeStack = stacks.nodeStack;
     2436    DeclarationStacks::NodeStack nodeStack;
     2437    DeclarationStacks stacks(nodeStack, m_varStack, m_functionStack);
    24382438   
    24392439    while (true) {
     
    24482448        nodeStack.shrink(size);
    24492449    }
    2450    
     2450
     2451    m_initializedDeclarationStacks = true;
     2452}
     2453
     2454void FunctionBodyNode::processDeclarations(ExecState* exec)
     2455{
     2456    if (!m_initializedDeclarationStacks)
     2457        initializeDeclarationStacks();
     2458
    24512459    size_t i, size;
    24522460
    2453     DeclarationStacks::FunctionStack& functionStack = stacks.functionStack;
    2454     for (i = 0, size = functionStack.size(); i < size; ++i)
    2455         functionStack[i]->processDeclaration(exec);
    2456 
    2457     DeclarationStacks::VarStack& varStack = stacks.varStack;
    2458     for (i = 0, size = varStack.size(); i < size; ++i)
    2459         varStack[i]->processDeclaration(exec);
     2461    for (i = 0, size = m_functionStack.size(); i < size; ++i)
     2462        m_functionStack[i]->processDeclaration(exec);
     2463
     2464    for (i = 0, size = m_varStack.size(); i < size; ++i)
     2465        m_varStack[i]->processDeclaration(exec);
    24602466}
    24612467
Note: See TracChangeset for help on using the changeset viewer.