Changeset 31114 in webkit


Ignore:
Timestamp:
Mar 17, 2008 4:33:40 PM (16 years ago)
Author:
oliver@apple.com
Message:

Add fast multi-level scope lookup

Reviewed by Geoff, Darin and Weinig

Add logic and AST nodes to provide rapid variable resolution across
static scope boundaries. This also adds logic that allows us to skip
any static scopes that do not contain the variable to be resolved.

This results in a ~2.5% speedup in SunSpider, and gives a 25-30% speedup
in some simple and ad hoc closure and global variable access tests.

Location:
trunk/JavaScriptCore
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/ChangeLog

    r31088 r31114  
     12008-03-17  Oliver Hunt  <oliver@apple.com>
     2
     3        Reviewed by Geoff, Darin and Weinig.
     4
     5        Add fast multi-level scope lookup
     6       
     7        Add logic and AST nodes to provide rapid variable resolution across
     8        static scope boundaries.  This also adds logic that allows us to skip
     9        any static scopes that do not contain the variable to be resolved.
     10       
     11        This results in a ~2.5% speedup in SunSpider, and gives a 25-30% speedup
     12        in some simple and ad hoc closure and global variable access tests.
     13
     14        * JavaScriptCore.exp:
     15        * kjs/Activation.h:
     16        * kjs/JSGlobalObject.cpp:
     17        * kjs/JSGlobalObject.h:
     18        * kjs/JSVariableObject.cpp:
     19        * kjs/JSVariableObject.h:
     20        * kjs/function.cpp:
     21        (KJS::ActivationImp::isDynamicScope):
     22        * kjs/nodes.cpp:
     23        (KJS::ResolveNode::optimizeVariableAccess):
     24        (KJS::ScopedVarAccessNode::inlineEvaluate):
     25        (KJS::ScopedVarAccessNode::evaluate):
     26        (KJS::ScopedVarAccessNode::evaluateToNumber):
     27        (KJS::ScopedVarAccessNode::evaluateToBoolean):
     28        (KJS::ScopedVarAccessNode::evaluateToInt32):
     29        (KJS::ScopedVarAccessNode::evaluateToUInt32):
     30        (KJS::NonLocalVarAccessNode::inlineEvaluate):
     31        (KJS::NonLocalVarAccessNode::evaluate):
     32        (KJS::NonLocalVarAccessNode::evaluateToNumber):
     33        (KJS::NonLocalVarAccessNode::evaluateToBoolean):
     34        (KJS::NonLocalVarAccessNode::evaluateToInt32):
     35        (KJS::NonLocalVarAccessNode::evaluateToUInt32):
     36        (KJS::IfElseNode::optimizeVariableAccess):
     37        (KJS::ScopeNode::optimizeVariableAccess):
     38        * kjs/nodes.h:
     39        (KJS::ScopedVarAccessNode::):
     40        (KJS::NonLocalVarAccessNode::):
     41        * kjs/object.h:
     42
    143 2008-03-16  weihongzeng  <weihong.zeng@hotmail.com>
    244 
  • trunk/JavaScriptCore/JavaScriptCore.exp

    r31072 r31114  
    229229__ZNK3KJS13ArrayInstance7getItemEj
    230230__ZNK3KJS14JSGlobalObject12saveBuiltinsERNS_13SavedBuiltinsE
     231__ZNK3KJS14JSGlobalObject14isDynamicScopeEv
     232__ZNK3KJS16JSVariableObject16isVariableObjectEv
    231233__ZNK3KJS16JSVariableObject16saveLocalStorageERNS_15SavedPropertiesE
    232234__ZNK3KJS19InternalFunctionImp14implementsCallEv
  • trunk/JavaScriptCore/kjs/Activation.h

    r30534 r31114  
    7474        bool needsPop() const { return d()->isOnStack || d()->leftRelic; }
    7575
     76        virtual bool isDynamicScope() const;
    7677    private:
    7778        static PropertySlot::GetValueFunc getArgumentsGetter();
  • trunk/JavaScriptCore/kjs/JSGlobalObject.cpp

    r30871 r31114  
    579579}
    580580
     581bool JSGlobalObject::isDynamicScope() const
     582{
     583    return true;
     584}
     585
    581586} // namespace KJS
  • trunk/JavaScriptCore/kjs/JSGlobalObject.h

    r30871 r31114  
    232232        void tearOffActivation(ExecState*, bool markAsRelic = false);
    233233
     234        virtual bool isDynamicScope() const;
     235
    234236    private:
    235237        void init();
  • trunk/JavaScriptCore/kjs/JSVariableObject.cpp

    r29943 r31114  
    104104}
    105105
     106bool JSVariableObject::isVariableObject() const
     107{
     108    return true;
     109}
     110
    106111} // namespace KJS
  • trunk/JavaScriptCore/kjs/JSVariableObject.h

    r30534 r31114  
    5050       
    5151        virtual void mark();
     52
     53        virtual bool isVariableObject() const;
     54        virtual bool isDynamicScope() const = 0;
    5255
    5356    protected:
  • trunk/JavaScriptCore/kjs/function.cpp

    r30953 r31114  
    481481    , isOnStack(false)
    482482{
     483}
     484
     485bool ActivationImp::isDynamicScope() const
     486{
     487    return d()->function->body->usesEval();
    483488}
    484489
  • trunk/JavaScriptCore/kjs/nodes.cpp

    r31072 r31114  
    426426}
    427427
    428 void BreakpointCheckStatement::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     428void BreakpointCheckStatement::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    429429{
    430430    nodeStack.append(m_statement.get());
     
    594594}
    595595
    596 void ResolveNode::optimizeVariableAccess(const SymbolTable& symbolTable, const LocalStorage&, NodeStack&)
     596void ResolveNode::optimizeVariableAccess(ExecState* exec, const SymbolTable& symbolTable, const LocalStorage&, NodeStack&)
    597597{
    598598    size_t index = symbolTable.get(m_ident.ustring().rep());
    599     if (index != missingSymbolMarker())
     599    if (index != missingSymbolMarker()) {
    600600        new (this) LocalVarAccessNode(index);
     601        return;
     602    }
     603   
     604    if (m_ident == exec->propertyNames().arguments)
     605        return;
     606    const ScopeChain& chain = exec->scopeChain();
     607    ScopeChainIterator iter = chain.begin();
     608    ScopeChainIterator end = chain.end();
     609    size_t depth = 0;
     610    for (; iter != end; ++iter, ++depth) {
     611        JSObject* currentScope = *iter;
     612        if (!currentScope->isVariableObject())
     613            break;
     614        JSVariableObject* currentVariableObject = static_cast<JSVariableObject*>(currentScope);
     615        index = currentVariableObject->symbolTable().get(m_ident.ustring().rep());
     616        if (index != missingSymbolMarker()) {
     617            new (this) ScopedVarAccessNode(index, depth);
     618            return;
     619        }
     620        if (currentVariableObject->isDynamicScope())
     621            break;
     622    }
     623    if (depth > 0)
     624        new (this) NonLocalVarAccessNode(depth);
    601625}
    602626
     
    632656}
    633657
     658JSValue* ScopedVarAccessNode::inlineEvaluate(ExecState* exec)
     659{
     660    const ScopeChain& chain = exec->scopeChain();
     661    ScopeChainIterator iter = chain.begin();
     662    for (size_t i = 0; i < m_scopeDepth; ++iter, ++i)
     663        ASSERT(iter != chain.end());
     664    JSObject* scope = *iter;
     665    ASSERT(scope->isActivationObject() || scope->isGlobalObject());
     666    JSVariableObject* variableObject = static_cast<JSVariableObject*>(scope);
     667    return variableObject->localStorage()[m_index].value;
     668}
     669
     670JSValue* ScopedVarAccessNode::evaluate(ExecState* exec)
     671{
     672    return inlineEvaluate(exec);
     673}
     674
     675double ScopedVarAccessNode::evaluateToNumber(ExecState* exec)
     676{
     677    return inlineEvaluate(exec)->toNumber(exec);
     678}
     679
     680bool ScopedVarAccessNode::evaluateToBoolean(ExecState* exec)
     681{
     682    return inlineEvaluate(exec)->toBoolean(exec);
     683}
     684
     685int32_t ScopedVarAccessNode::evaluateToInt32(ExecState* exec)
     686{
     687    return inlineEvaluate(exec)->toInt32(exec);
     688}
     689
     690uint32_t ScopedVarAccessNode::evaluateToUInt32(ExecState* exec)
     691{
     692    return inlineEvaluate(exec)->toUInt32(exec);
     693}
     694
     695JSValue* NonLocalVarAccessNode::inlineEvaluate(ExecState* exec)
     696{
     697    // Check for missed optimization opportunity.
     698    ASSERT(!canSkipLookup(exec, m_ident));
     699   
     700    const ScopeChain& chain = exec->scopeChain();
     701    ScopeChainIterator iter = chain.begin();
     702    ScopeChainIterator end = chain.end();
     703    for (size_t i = 0; i < m_scopeDepth; ++i, ++iter)
     704        ASSERT(iter != end);
     705
     706    // we must always have something in the scope chain
     707    ASSERT(iter != end);
     708   
     709    PropertySlot slot;
     710    do {
     711        JSObject* o = *iter;
     712       
     713        if (o->getPropertySlot(exec, m_ident, slot))
     714            return slot.getValue(exec, o, m_ident);
     715       
     716        ++iter;
     717    } while (iter != end);
     718   
     719    return throwUndefinedVariableError(exec, m_ident);
     720}
     721
     722JSValue* NonLocalVarAccessNode::evaluate(ExecState* exec)
     723{
     724    return inlineEvaluate(exec);
     725}
     726
     727double NonLocalVarAccessNode::evaluateToNumber(ExecState* exec)
     728{
     729    return inlineEvaluate(exec)->toNumber(exec);
     730}
     731
     732bool NonLocalVarAccessNode::evaluateToBoolean(ExecState* exec)
     733{
     734    return inlineEvaluate(exec)->toBoolean(exec);
     735}
     736
     737int32_t NonLocalVarAccessNode::evaluateToInt32(ExecState* exec)
     738{
     739    return inlineEvaluate(exec)->toInt32(exec);
     740}
     741
     742uint32_t NonLocalVarAccessNode::evaluateToUInt32(ExecState* exec)
     743{
     744    return inlineEvaluate(exec)->toUInt32(exec);
     745}
     746
    634747// ------------------------------ ElementNode ----------------------------------
    635748
    636 void ElementNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     749void ElementNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    637750{
    638751    if (m_next)
     
    658771// ------------------------------ ArrayNode ------------------------------------
    659772
    660 void ArrayNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     773void ArrayNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    661774{
    662775    if (m_element)
     
    688801// ------------------------------ ObjectLiteralNode ----------------------------
    689802
    690 void ObjectLiteralNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     803void ObjectLiteralNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    691804{
    692805    if (m_list)
     
    705818// ------------------------------ PropertyListNode -----------------------------
    706819
    707 void PropertyListNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     820void PropertyListNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    708821{
    709822    if (m_next)
     
    741854// ------------------------------ PropertyNode -----------------------------
    742855
    743 void PropertyNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     856void PropertyNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    744857{
    745858    nodeStack.append(m_assign.get());
     
    755868// ------------------------------ BracketAccessorNode --------------------------------
    756869
    757 void BracketAccessorNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     870void BracketAccessorNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    758871{
    759872    nodeStack.append(m_subscript.get());
     
    810923// ------------------------------ DotAccessorNode --------------------------------
    811924
    812 void DotAccessorNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     925void DotAccessorNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    813926{
    814927    nodeStack.append(m_base.get());
     
    858971// ------------------------------ ArgumentListNode -----------------------------
    859972
    860 void ArgumentListNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     973void ArgumentListNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    861974{
    862975    if (m_next)
     
    878991// ------------------------------ ArgumentsNode --------------------------------
    879992
    880 void ArgumentsNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     993void ArgumentsNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    881994{
    882995    if (m_listNode)
     
    886999// ------------------------------ NewExprNode ----------------------------------
    8871000
    888 void NewExprNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     1001void NewExprNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    8891002{
    8901003    if (m_args)
     
    10031116}
    10041117
    1005 void EvalFunctionCallNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     1118void EvalFunctionCallNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    10061119{
    10071120    nodeStack.append(m_args.get());
     
    10131126}
    10141127
    1015 void FunctionCallValueNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     1128void FunctionCallValueNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    10161129{
    10171130    nodeStack.append(m_args.get());
     
    10441157}
    10451158
    1046 void FunctionCallResolveNode::optimizeVariableAccess(const SymbolTable& symbolTable, const LocalStorage&, NodeStack& nodeStack)
     1159void FunctionCallResolveNode::optimizeVariableAccess(ExecState*, const SymbolTable& symbolTable, const LocalStorage&, NodeStack& nodeStack)
    10471160{
    10481161    nodeStack.append(m_args.get());
     
    11481261}
    11491262
    1150 void FunctionCallBracketNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     1263void FunctionCallBracketNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    11511264{
    11521265    nodeStack.append(m_args.get());
     
    12151328}
    12161329
    1217 void FunctionCallDotNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     1330void FunctionCallDotNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    12181331{
    12191332    nodeStack.append(m_args.get());
     
    12901403
    12911404// Increment
    1292 void PostIncResolveNode::optimizeVariableAccess(const SymbolTable& symbolTable, const LocalStorage& localStorage, NodeStack&)
     1405void PostIncResolveNode::optimizeVariableAccess(ExecState*, const SymbolTable& symbolTable, const LocalStorage& localStorage, NodeStack&)
    12931406{
    12941407    size_t index = symbolTable.get(m_ident.ustring().rep());
     
    13541467
    13551468// Decrement
    1356 void PostDecResolveNode::optimizeVariableAccess(const SymbolTable& symbolTable, const LocalStorage& localStorage, NodeStack&)
     1469void PostDecResolveNode::optimizeVariableAccess(ExecState*, const SymbolTable& symbolTable, const LocalStorage& localStorage, NodeStack&)
    13571470{
    13581471    size_t index = symbolTable.get(m_ident.ustring().rep());
     
    14471560// ------------------------------ PostfixBracketNode ----------------------------------
    14481561
    1449 void PostfixBracketNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     1562void PostfixBracketNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    14501563{
    14511564    nodeStack.append(m_subscript.get());
     
    15161629// ------------------------------ PostfixDotNode ----------------------------------
    15171630
    1518 void PostfixDotNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     1631void PostfixDotNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    15191632{
    15201633    nodeStack.append(m_base.get());
     
    15631676// ------------------------------ DeleteResolveNode -----------------------------------
    15641677
    1565 void DeleteResolveNode::optimizeVariableAccess(const SymbolTable& symbolTable, const LocalStorage&, NodeStack&)
     1678void DeleteResolveNode::optimizeVariableAccess(ExecState*, const SymbolTable& symbolTable, const LocalStorage&, NodeStack&)
    15661679{
    15671680    size_t index = symbolTable.get(m_ident.ustring().rep());
     
    16041717// ------------------------------ DeleteBracketNode -----------------------------------
    16051718
    1606 void DeleteBracketNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     1719void DeleteBracketNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    16071720{
    16081721    nodeStack.append(m_subscript.get());
     
    16291742// ------------------------------ DeleteDotNode -----------------------------------
    16301743
    1631 void DeleteDotNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     1744void DeleteDotNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    16321745{
    16331746    nodeStack.append(m_base.get());
     
    16451758// ------------------------------ DeleteValueNode -----------------------------------
    16461759
    1647 void DeleteValueNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     1760void DeleteValueNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    16481761{
    16491762    nodeStack.append(m_expr.get());
     
    16611774// ------------------------------ VoidNode -------------------------------------
    16621775
    1663 void VoidNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     1776void VoidNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    16641777{
    16651778    nodeStack.append(m_expr.get());
     
    16791792// ------------------------------ TypeOfValueNode -----------------------------------
    16801793
    1681 void TypeOfValueNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     1794void TypeOfValueNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    16821795{
    16831796    nodeStack.append(m_expr.get());
     
    17121825}
    17131826
    1714 void TypeOfResolveNode::optimizeVariableAccess(const SymbolTable& symbolTable, const LocalStorage&, NodeStack&)
     1827void TypeOfResolveNode::optimizeVariableAccess(ExecState*, const SymbolTable& symbolTable, const LocalStorage&, NodeStack&)
    17151828{
    17161829    size_t index = symbolTable.get(m_ident.ustring().rep());
     
    17641877// ------------------------------ PrefixResolveNode ----------------------------------
    17651878
    1766 void PreIncResolveNode::optimizeVariableAccess(const SymbolTable& symbolTable, const LocalStorage& localStorage, NodeStack&)
     1879void PreIncResolveNode::optimizeVariableAccess(ExecState*, const SymbolTable& symbolTable, const LocalStorage& localStorage, NodeStack&)
    17671880{
    17681881    size_t index = symbolTable.get(m_ident.ustring().rep());
     
    18161929}
    18171930
    1818 void PreDecResolveNode::optimizeVariableAccess(const SymbolTable& symbolTable, const LocalStorage& localStorage, NodeStack&)
     1931void PreDecResolveNode::optimizeVariableAccess(ExecState*, const SymbolTable& symbolTable, const LocalStorage& localStorage, NodeStack&)
    18191932{
    18201933    size_t index = symbolTable.get(m_ident.ustring().rep());
     
    19022015// ------------------------------ PrefixBracketNode ----------------------------------
    19032016
    1904 void PrefixBracketNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     2017void PrefixBracketNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    19052018{
    19062019    nodeStack.append(m_subscript.get());
     
    19742087// ------------------------------ PrefixDotNode ----------------------------------
    19752088
    1976 void PrefixDotNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     2089void PrefixDotNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    19772090{
    19782091    nodeStack.append(m_base.get());
     
    20252138// ------------------------------ UnaryPlusNode --------------------------------
    20262139
    2027 void UnaryPlusNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     2140void UnaryPlusNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    20282141{
    20292142    nodeStack.append(m_expr.get());
     
    20602173// ------------------------------ NegateNode -----------------------------------
    20612174
    2062 void NegateNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     2175void NegateNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    20632176{
    20642177    nodeStack.append(m_expr.get());
     
    20802193// ------------------------------ BitwiseNotNode -------------------------------
    20812194
    2082 void BitwiseNotNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     2195void BitwiseNotNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    20832196{
    20842197    nodeStack.append(m_expr.get());
     
    21182231// ------------------------------ LogicalNotNode -------------------------------
    21192232
    2120 void LogicalNotNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     2233void LogicalNotNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    21212234{
    21222235    nodeStack.append(m_expr.get());
     
    21362249// ------------------------------ Multiplicative Nodes -----------------------------------
    21372250
    2138 void MultNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     2251void MultNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    21392252{
    21402253    nodeStack.append(m_term1.get());
     
    21772290}
    21782291
    2179 void DivNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     2292void DivNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    21802293{
    21812294    nodeStack.append(m_term1.get());
     
    22122325}
    22132326
    2214 void ModNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     2327void ModNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    22152328{
    22162329    nodeStack.append(m_term1.get());
     
    23502463}
    23512464
    2352 void AddNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     2465void AddNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    23532466{
    23542467    nodeStack.append(m_term1.get());
     
    24572570}
    24582571
    2459 void SubNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     2572void SubNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    24602573{
    24612574    nodeStack.append(m_term1.get());
     
    24942607// ------------------------------ Shift Nodes ------------------------------------
    24952608
    2496 void LeftShiftNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     2609void LeftShiftNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    24972610{
    24982611    nodeStack.append(m_term1.get());
     
    25292642}
    25302643
    2531 void RightShiftNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     2644void RightShiftNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    25322645{
    25332646    nodeStack.append(m_term1.get());
     
    25642677}
    25652678
    2566 void UnsignedRightShiftNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     2679void UnsignedRightShiftNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    25672680{
    25682681    nodeStack.append(m_term1.get());
     
    26312744}
    26322745
    2633 void LessNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     2746void LessNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    26342747{
    26352748    nodeStack.append(m_expr2.get());
     
    26932806}
    26942807
    2695 void GreaterNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     2808void GreaterNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    26962809{
    26972810    nodeStack.append(m_expr2.get());
     
    27192832}
    27202833
    2721 void LessEqNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     2834void LessEqNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    27222835{
    27232836    nodeStack.append(m_expr2.get());
     
    27452858}
    27462859
    2747 void GreaterEqNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     2860void GreaterEqNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    27482861{
    27492862    nodeStack.append(m_expr2.get());
     
    27712884}
    27722885
    2773 void InstanceOfNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     2886void InstanceOfNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    27742887{
    27752888    nodeStack.append(m_expr2.get());
     
    28242937}
    28252938
    2826 void InNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     2939void InNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    28272940{
    28282941    nodeStack.append(m_expr2.get());
     
    28612974// ------------------------------ Equality Nodes ------------------------------------
    28622975
    2863 void EqualNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     2976void EqualNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    28642977{
    28652978    nodeStack.append(m_expr2.get());
     
    28883001}
    28893002
    2890 void NotEqualNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     3003void NotEqualNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    28913004{
    28923005    nodeStack.append(m_expr2.get());
     
    29153028}
    29163029
    2917 void StrictEqualNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     3030void StrictEqualNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    29183031{
    29193032    nodeStack.append(m_expr2.get());
     
    29423055}
    29433056
    2944 void NotStrictEqualNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     3057void NotStrictEqualNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    29453058{
    29463059    nodeStack.append(m_expr2.get());
     
    29713084// ------------------------------ Bit Operation Nodes ----------------------------------
    29723085
    2973 void BitAndNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     3086void BitAndNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    29743087{
    29753088    nodeStack.append(m_expr2.get());
     
    30163129}
    30173130
    3018 void BitXOrNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     3131void BitXOrNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    30193132{
    30203133    nodeStack.append(m_expr2.get());
     
    30553168}
    30563169
    3057 void BitOrNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     3170void BitOrNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    30583171{
    30593172    nodeStack.append(m_expr2.get());
     
    30963209// ------------------------------ Binary Logical Nodes ----------------------------
    30973210
    3098 void LogicalAndNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     3211void LogicalAndNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    30993212{
    31003213    nodeStack.append(m_expr2.get());
     
    31233236}
    31243237
    3125 void LogicalOrNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     3238void LogicalOrNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    31263239{
    31273240    nodeStack.append(m_expr2.get());
     
    31473260// ------------------------------ ConditionalNode ------------------------------
    31483261
    3149 void ConditionalNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     3262void ConditionalNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    31503263{
    31513264    nodeStack.append(m_expr2.get());
     
    32583371// ------------------------------ ReadModifyResolveNode -----------------------------------
    32593372
    3260 void ReadModifyResolveNode::optimizeVariableAccess(const SymbolTable& symbolTable, const LocalStorage& localStorage, NodeStack& nodeStack)
     3373void ReadModifyResolveNode::optimizeVariableAccess(ExecState*, const SymbolTable& symbolTable, const LocalStorage& localStorage, NodeStack& nodeStack)
    32613374{
    32623375    nodeStack.append(m_right.get());
     
    32723385// ------------------------------ AssignResolveNode -----------------------------------
    32733386
    3274 void AssignResolveNode::optimizeVariableAccess(const SymbolTable& symbolTable, const LocalStorage& localStorage, NodeStack& nodeStack)
     3387void AssignResolveNode::optimizeVariableAccess(ExecState*, const SymbolTable& symbolTable, const LocalStorage& localStorage, NodeStack& nodeStack)
    32753388{
    32763389    nodeStack.append(m_right.get());
     
    34133526// ------------------------------ ReadModifyDotNode -----------------------------------
    34143527
    3415 void AssignDotNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     3528void AssignDotNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    34163529{
    34173530    nodeStack.append(m_right.get());
     
    34333546}
    34343547
    3435 void ReadModifyDotNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     3548void ReadModifyDotNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    34363549{
    34373550    nodeStack.append(m_right.get());
     
    34703583// ------------------------------ AssignBracketNode -----------------------------------
    34713584
    3472 void AssignBracketNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     3585void AssignBracketNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    34733586{
    34743587    nodeStack.append(m_right.get());
     
    35023615    return v;
    35033616}
    3504 void ReadModifyBracketNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     3617void ReadModifyBracketNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    35053618{
    35063619    nodeStack.append(m_right.get());
     
    35503663// ------------------------------ CommaNode ------------------------------------
    35513664
    3552 void CommaNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     3665void CommaNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    35533666{
    35543667    nodeStack.append(m_expr2.get());
     
    35723685}
    35733686
    3574 void ConstDeclNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     3687void ConstDeclNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    35753688{
    35763689    if (m_next)
     
    36523765// ------------------------------ ConstStatementNode -----------------------------
    36533766
    3654 void ConstStatementNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     3767void ConstStatementNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    36553768{
    36563769    ASSERT(m_next);
     
    37183831}
    37193832
    3720 void BlockNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     3833void BlockNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    37213834{
    37223835    statementListPushFIFO(m_children, nodeStack);
     
    37393852// ------------------------------ ExprStatementNode ----------------------------
    37403853
    3741 void ExprStatementNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     3854void ExprStatementNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    37423855{
    37433856    ASSERT(m_expr);
     
    37563869// ------------------------------ VarStatementNode ----------------------------
    37573870
    3758 void VarStatementNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     3871void VarStatementNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    37593872{
    37603873    ASSERT(m_expr);
     
    37723885// ------------------------------ IfNode ---------------------------------------
    37733886
    3774 void IfNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     3887void IfNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    37753888{
    37763889    nodeStack.append(m_ifBlock.get());
     
    37893902}
    37903903
    3791 void IfElseNode::optimizeVariableAccess(const SymbolTable& symbolTable, const LocalStorage& localStorage, NodeStack& nodeStack)
     3904void IfElseNode::optimizeVariableAccess(ExecState* exec, const SymbolTable& symbolTable, const LocalStorage& localStorage, NodeStack& nodeStack)
    37923905{
    37933906    nodeStack.append(m_elseBlock.get());
    3794     IfNode::optimizeVariableAccess(symbolTable, localStorage, nodeStack);
     3907    IfNode::optimizeVariableAccess(exec, symbolTable, localStorage, nodeStack);
    37953908}
    37963909
     
    38083921// ------------------------------ DoWhileNode ----------------------------------
    38093922
    3810 void DoWhileNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     3923void DoWhileNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    38113924{
    38123925    nodeStack.append(m_statement.get());
     
    38503963// ------------------------------ WhileNode ------------------------------------
    38513964
    3852 void WhileNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     3965void WhileNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    38533966{
    38543967    nodeStack.append(m_statement.get());
     
    38914004// ------------------------------ ForNode --------------------------------------
    38924005
    3893 void ForNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     4006void ForNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    38944007{
    38954008    nodeStack.append(m_statement.get());
     
    39614074}
    39624075
    3963 void ForInNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     4076void ForInNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    39644077{
    39654078    nodeStack.append(m_statement.get());
     
    40934206// ------------------------------ ReturnNode -----------------------------------
    40944207
    4095 void ReturnNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     4208void ReturnNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    40964209{
    40974210    if (m_value)
     
    41174230// ------------------------------ WithNode -------------------------------------
    41184231
    4119 void WithNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     4232void WithNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    41204233{
    41214234    // Can't optimize within statement because "with" introduces a dynamic scope.
     
    41404253// ------------------------------ CaseClauseNode -------------------------------
    41414254
    4142 void CaseClauseNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     4255void CaseClauseNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    41434256{
    41444257    if (m_expr)
     
    41644277// ------------------------------ ClauseListNode -------------------------------
    41654278
    4166 void ClauseListNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     4279void ClauseListNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    41674280{
    41684281    if (m_next)
     
    41804293}
    41814294
    4182 void CaseBlockNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     4295void CaseBlockNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    41834296{
    41844297    if (m_list2)
     
    42504363// ------------------------------ SwitchNode -----------------------------------
    42514364
    4252 void SwitchNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     4365void SwitchNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    42534366{
    42544367    nodeStack.append(m_block.get());
     
    42734386// ------------------------------ LabelNode ------------------------------------
    42744387
    4275 void LabelNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     4388void LabelNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    42764389{
    42774390    nodeStack.append(m_statement.get());
     
    42934406// ------------------------------ ThrowNode ------------------------------------
    42944407
    4295 void ThrowNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     4408void ThrowNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    42964409{
    42974410    nodeStack.append(m_expr.get());
     
    43104423// ------------------------------ TryNode --------------------------------------
    43114424
    4312 void TryNode::optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
     4425void TryNode::optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack& nodeStack)
    43134426{
    43144427    // Can't optimize within catchBlock because "catch" introduces a dynamic scope.
     
    44824595    const LocalStorage& localStorage = exec->variableObject()->localStorage();
    44834596    while (true) {
    4484         node->optimizeVariableAccess(symbolTable, localStorage, nodeStack);
     4597        node->optimizeVariableAccess(exec, symbolTable, localStorage, nodeStack);
    44854598
    44864599        size_t size = nodeStack.size();
  • trunk/JavaScriptCore/kjs/nodes.h

    r31072 r31114  
    147147
    148148        // Used for iterative, depth-first traversal of the node tree. Does not cross function call boundaries.
    149         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL { }
     149        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL { }
    150150
    151151    protected:
     
    377377        }
    378378
    379         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     379        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    380380
    381381        virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     
    394394        ALWAYS_INLINE JSValue* inlineEvaluate(ExecState*);
    395395        Identifier m_ident;
    396         size_t m_index; // Used by LocalVarAccessNode.
     396        size_t m_index; // Used by LocalVarAccessNode and ScopedVarAccessNode.
     397        size_t m_scopeDepth; // Used by ScopedVarAccessNode
    397398    };
    398399
     
    416417        ALWAYS_INLINE JSValue* inlineEvaluate(ExecState*);
    417418    };
     419   
     420    class ScopedVarAccessNode : public ResolveNode {
     421    public:
     422        // Overwrites a ResolveNode in place.
     423        ScopedVarAccessNode(size_t i, size_t scopeDepth) KJS_FAST_CALL
     424        : ResolveNode(PlacementNewAdopt)
     425        {
     426            ASSERT(i != missingSymbolMarker());
     427            m_index = i;
     428            m_scopeDepth = scopeDepth;
     429        }
     430       
     431        virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     432        virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL;
     433        virtual bool evaluateToBoolean(ExecState*) KJS_FAST_CALL;
     434        virtual int32_t evaluateToInt32(ExecState*) KJS_FAST_CALL;
     435        virtual uint32_t evaluateToUInt32(ExecState*) KJS_FAST_CALL;
     436       
     437    private:
     438        ALWAYS_INLINE JSValue* inlineEvaluate(ExecState*);
     439    };
     440   
     441    class NonLocalVarAccessNode : public ResolveNode {
     442    public:
     443        // Overwrites a ResolveNode in place.
     444        NonLocalVarAccessNode(size_t scopeDepth) KJS_FAST_CALL
     445        : ResolveNode(PlacementNewAdopt)
     446        {
     447            ASSERT(scopeDepth != 0);
     448            m_scopeDepth = scopeDepth;
     449        }
     450       
     451        virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     452        virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL;
     453        virtual bool evaluateToBoolean(ExecState*) KJS_FAST_CALL;
     454        virtual int32_t evaluateToInt32(ExecState*) KJS_FAST_CALL;
     455        virtual uint32_t evaluateToUInt32(ExecState*) KJS_FAST_CALL;
     456       
     457    private:
     458        ALWAYS_INLINE JSValue* inlineEvaluate(ExecState*);
     459    };
    418460
    419461    class ElementNode : public Node {
     
    434476        virtual Precedence precedence() const { ASSERT_NOT_REACHED(); return PrecExpression; }
    435477        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    436         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     478        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    437479
    438480        PassRefPtr<ElementNode> releaseNext() KJS_FAST_CALL { return m_next.release(); }
     
    469511        }
    470512
    471         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     513        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    472514        virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    473515        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    491533        }
    492534
    493         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     535        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    494536        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    495537        virtual Precedence precedence() const { ASSERT_NOT_REACHED(); return PrecExpression; }
     
    518560        }
    519561
    520         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     562        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    521563        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    522564        virtual Precedence precedence() const { ASSERT_NOT_REACHED(); return PrecExpression; }
     
    542584        }
    543585
    544         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     586        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    545587        virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    546588        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    560602        }
    561603
    562         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     604        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    563605        virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    564606        virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL;
     
    589631        }
    590632
    591         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     633        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    592634        virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    593635        virtual bool evaluateToBoolean(ExecState*) KJS_FAST_CALL;
     
    623665        }
    624666
    625         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     667        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    626668        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    627669        virtual Precedence precedence() const { ASSERT_NOT_REACHED(); return PrecExpression; }
     
    647689        }
    648690
    649         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     691        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    650692        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    651693        virtual Precedence precedence() const { ASSERT_NOT_REACHED(); return PrecExpression; }
     
    670712        }
    671713
    672         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     714        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    673715        virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    674716        virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL;
     
    693735        }
    694736
    695         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     737        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    696738        virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    697739        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    710752        }
    711753
    712         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     754        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    713755        virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    714756        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    735777        }
    736778
    737         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     779        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    738780        virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    739781        virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL;
     
    780822        }
    781823
    782         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     824        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    783825        virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    784826        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    800842        }
    801843
    802         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     844        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    803845        virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    804846        virtual bool evaluateToBoolean(ExecState*) KJS_FAST_CALL;
     
    848890        }
    849891
    850         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     892        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    851893        virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    852894        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    892934        }
    893935
    894         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     936        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    895937        virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    896938        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    939981        }
    940982
    941         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     983        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    942984        virtual Precedence precedence() const { return PrecPostfix; }
    943985
     
    9771019        }
    9781020
    979         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     1021        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    9801022        virtual Precedence precedence() const { return PrecPostfix; }
    9811023
     
    10371079        }
    10381080
    1039         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     1081        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    10401082        virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    10411083        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    10641106        }
    10651107
    1066         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     1108        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    10671109        virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    10681110        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    10821124        }
    10831125
    1084         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     1126        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    10851127        virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    10861128        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    10991141        }
    11001142
    1101         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     1143        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    11021144        virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    11031145        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    11151157        }
    11161158
    1117         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     1159        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    11181160        virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    11191161        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    11391181        }
    11401182
    1141         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     1183        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    11421184
    11431185        virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     
    11731215        }
    11741216
    1175         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     1217        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    11761218        virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    11771219        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    11941236        }
    11951237
    1196         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     1238        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    11971239
    11981240        virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     
    12371279        }
    12381280
    1239         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     1281        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    12401282
    12411283        virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     
    12761318        }
    12771319
    1278         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     1320        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    12791321        virtual Precedence precedence() const { return PrecUnary; }
    12801322
     
    13141356        }
    13151357
    1316         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     1358        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    13171359        virtual Precedence precedence() const { return PrecPostfix; }
    13181360
     
    13691411        }
    13701412
    1371         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     1413        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    13721414        virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    13731415        virtual bool evaluateToBoolean(ExecState*) KJS_FAST_CALL;
     
    13901432        }
    13911433
    1392         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     1434        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    13931435        virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    13941436        virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL;
     
    14081450        }
    14091451
    1410         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     1452        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    14111453        virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    14121454        virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL;
     
    14311473        }
    14321474
    1433         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     1475        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    14341476        virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    14351477        virtual bool evaluateToBoolean(ExecState*) KJS_FAST_CALL;
     
    14501492        }
    14511493
    1452         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     1494        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    14531495        virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    14541496        virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL;
     
    14751517        }
    14761518
    1477         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     1519        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    14781520        virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    14791521        virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL;
     
    14991541        }
    15001542
    1501         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     1543        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    15021544        virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    15031545        virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL;
     
    15231565        }
    15241566
    1525         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     1567        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    15261568        virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    15271569        virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL;
     
    16011643        }
    16021644
    1603         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     1645        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    16041646        virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    16051647        virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL;
     
    16251667        }
    16261668
    1627         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     1669        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    16281670        virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    16291671        virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL;
     
    16491691        }
    16501692
    1651         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     1693        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    16521694        virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    16531695        virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL;
     
    16731715        }
    16741716
    1675         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     1717        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    16761718        virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    16771719        virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL;
     
    16961738        }
    16971739
    1698         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     1740        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    16991741        virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    17001742        virtual bool evaluateToBoolean(ExecState*) KJS_FAST_CALL;
     
    17461788        }
    17471789
    1748         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     1790        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    17491791        virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    17501792        virtual bool evaluateToBoolean(ExecState*) KJS_FAST_CALL;
     
    17671809        }
    17681810
    1769         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     1811        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    17701812        virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    17711813        virtual bool evaluateToBoolean(ExecState*) KJS_FAST_CALL;
     
    17881830        }
    17891831
    1790         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     1832        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    17911833        virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    17921834        virtual bool evaluateToBoolean(ExecState*) KJS_FAST_CALL;
     
    18101852        }
    18111853
    1812         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     1854        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    18131855        virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    18141856        virtual bool evaluateToBoolean(ExecState*) KJS_FAST_CALL;
     
    18291871        }
    18301872
    1831         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     1873        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    18321874        virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    18331875        virtual bool evaluateToBoolean(ExecState*) KJS_FAST_CALL;
     
    18491891        }
    18501892
    1851         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     1893        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    18521894        virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    18531895        virtual bool evaluateToBoolean(ExecState*) KJS_FAST_CALL;
     
    18711913        }
    18721914
    1873         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     1915        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    18741916        virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    18751917        virtual bool evaluateToBoolean(ExecState*) KJS_FAST_CALL;
     
    18931935        }
    18941936
    1895         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     1937        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    18961938        virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    18971939        virtual bool evaluateToBoolean(ExecState*) KJS_FAST_CALL;
     
    19151957        }
    19161958
    1917         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     1959        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    19181960        virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    19191961        virtual bool evaluateToBoolean(ExecState*) KJS_FAST_CALL;
     
    19371979        }
    19381980
    1939         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     1981        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    19401982        virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    19411983        virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL;
     
    19622004        }
    19632005
    1964         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     2006        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    19652007        virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    19662008        virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL;
     
    19872029        }
    19882030
    1989         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     2031        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    19902032        virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    19912033        virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL;
     
    20152057        }
    20162058
    2017         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     2059        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    20182060        virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    20192061        virtual bool evaluateToBoolean(ExecState*) KJS_FAST_CALL;
     
    20372079        }
    20382080
    2039         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     2081        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    20402082        virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    20412083        virtual bool evaluateToBoolean(ExecState*) KJS_FAST_CALL;
     
    20622104        }
    20632105
    2064         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     2106        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    20652107        virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    20662108        virtual bool evaluateToBoolean(ExecState*) KJS_FAST_CALL;
     
    20932135        }
    20942136
    2095         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     2137        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    20962138        virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    20972139        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    21442186        }
    21452187
    2146         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     2188        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    21472189        virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    21482190        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    21872229        }
    21882230
    2189         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     2231        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    21902232        virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    21912233        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    22082250        }
    22092251
    2210         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     2252        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    22112253        virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    22122254        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    22282270        }
    22292271
    2230         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     2272        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    22312273        virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    22322274        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    22492291        }
    22502292
    2251         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     2293        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    22522294        virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    22532295        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    22892331        }
    22902332
    2291         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     2333        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    22922334        virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    22932335        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    23122354        ConstDeclNode(const Identifier& ident, ExpressionNode* in) KJS_FAST_CALL;
    23132355
    2314         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     2356        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    23152357        virtual KJS::JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    23162358        void evaluateSingle(ExecState*) KJS_FAST_CALL;
     
    23342376        }
    23352377
    2336         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     2378        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    23372379        virtual JSValue* execute(ExecState*) KJS_FAST_CALL;
    23382380        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    23612403        BlockNode(SourceElements* children) KJS_FAST_CALL;
    23622404
    2363         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     2405        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    23642406        virtual JSValue* execute(ExecState*) KJS_FAST_CALL;
    23652407        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    23872429        }
    23882430
    2389         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     2431        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    23902432        virtual JSValue* execute(ExecState*) KJS_FAST_CALL;
    23912433        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    24022444        }
    24032445
    2404         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     2446        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    24052447        virtual JSValue* execute(ExecState*) KJS_FAST_CALL;
    24062448        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    24182460        }
    24192461
    2420         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     2462        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    24212463        virtual JSValue* execute(ExecState*) KJS_FAST_CALL;
    24222464        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    24352477        }
    24362478
    2437         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     2479        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    24382480        virtual JSValue* execute(ExecState*) KJS_FAST_CALL;
    24392481        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    24512493        }
    24522494
    2453         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     2495        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    24542496        virtual JSValue* execute(ExecState*) KJS_FAST_CALL;
    24552497        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    24682510        }
    24692511
    2470         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     2512        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    24712513        virtual JSValue* execute(ExecState*) KJS_FAST_CALL;
    24722514        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    24952537        }
    24962538
    2497         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     2539        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    24982540        virtual JSValue* execute(ExecState*) KJS_FAST_CALL;
    24992541        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    25122554        ForInNode(const Identifier&, ExpressionNode*, ExpressionNode*, StatementNode*) KJS_FAST_CALL;
    25132555
    2514         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     2556        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    25152557        virtual JSValue* execute(ExecState*) KJS_FAST_CALL;
    25162558        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    25682610        }
    25692611
    2570         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     2612        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    25712613        virtual JSValue* execute(ExecState*) KJS_FAST_CALL;
    25722614        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    25842626        }
    25852627
    2586         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     2628        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    25872629        virtual JSValue* execute(ExecState*) KJS_FAST_CALL;
    25882630        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    26012643        }
    26022644
    2603         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     2645        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    26042646        virtual JSValue* execute(ExecState*) KJS_FAST_CALL;
    26052647        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    26182660        }
    26192661
    2620         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     2662        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    26212663        virtual JSValue* execute(ExecState*) KJS_FAST_CALL;
    26222664        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    26362678        }
    26372679
    2638         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     2680        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    26392681        virtual JSValue* execute(ExecState*) KJS_FAST_CALL;
    26402682        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    28162858        }
    28172859
    2818         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     2860        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    28192861        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    28202862        virtual Precedence precedence() const { ASSERT_NOT_REACHED(); return PrecExpression; }
     
    28412883        }
    28422884
    2843         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     2885        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    28442886        CaseClauseNode* getClause() const KJS_FAST_CALL { return m_clause.get(); }
    28452887        ClauseListNode* getNext() const KJS_FAST_CALL { return m_next.get(); }
     
    28582900        CaseBlockNode(ClauseListNode* list1, CaseClauseNode* defaultClause, ClauseListNode* list2) KJS_FAST_CALL;
    28592901
    2860         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     2902        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    28612903        JSValue* executeBlock(ExecState*, JSValue *input) KJS_FAST_CALL;
    28622904        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    28772919        }
    28782920
    2879         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     2921        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    28802922        virtual JSValue* execute(ExecState*) KJS_FAST_CALL;
    28812923        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    28922934        virtual JSValue* execute(ExecState*) KJS_FAST_CALL;
    28932935        virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    2894         virtual void optimizeVariableAccess(const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
     2936        virtual void optimizeVariableAccess(ExecState*, const SymbolTable&, const LocalStorage&, NodeStack&) KJS_FAST_CALL;
    28952937
    28962938    private:
  • trunk/JavaScriptCore/kjs/object.h

    r30534 r31114  
    433433    virtual bool isActivationObject() const { return false; }
    434434    virtual bool isGlobalObject() const { return false; }
     435    virtual bool isVariableObject() const { return false; }
    435436
    436437  protected:
Note: See TracChangeset for help on using the changeset viewer.