Changeset 28551 in webkit for trunk/JavaScriptCore/kjs


Ignore:
Timestamp:
Dec 7, 2007, 4:59:48 PM (17 years ago)
Author:
[email protected]
Message:

Reviewed by Sam Weinig.


Refactored variable access optimization: Removed the assumption that
the FunctionBodyNode holds the symbol table.

Location:
trunk/JavaScriptCore/kjs
Files:
2 edited

Legend:

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

    r28549 r28551  
    563563}
    564564
    565 void ResolveNode::optimizeVariableAccess(FunctionBodyNode* functionBody, DeclarationStacks::NodeStack&)
    566 {
    567     size_t index = functionBody->symbolTable().get(ident.ustring().rep());
     565void ResolveNode::optimizeVariableAccess(SymbolTable& symbolTable, DeclarationStacks::NodeStack&)
     566{
     567    size_t index = symbolTable.get(ident.ustring().rep());
    568568    if (index != missingSymbolMarker())
    569569        new (this) LocalVarAccessNode(index);
     
    603603// ------------------------------ ElementNode ----------------------------------
    604604
    605 void ElementNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     605void ElementNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    606606{
    607607    if (next)
     
    627627// ------------------------------ ArrayNode ------------------------------------
    628628
    629 void ArrayNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     629void ArrayNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    630630{
    631631    if (element)
     
    658658// ------------------------------ ObjectLiteralNode ----------------------------
    659659
    660 void ObjectLiteralNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     660void ObjectLiteralNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    661661{
    662662    if (list)
     
    675675// ------------------------------ PropertyListNode -----------------------------
    676676
    677 void PropertyListNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     677void PropertyListNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    678678{
    679679    if (next)
     
    711711// ------------------------------ PropertyNode -----------------------------
    712712
    713 void PropertyNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     713void PropertyNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    714714{
    715715    nodeStack.append(assign.get());
     
    725725// ------------------------------ BracketAccessorNode --------------------------------
    726726
    727 void BracketAccessorNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     727void BracketAccessorNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    728728{
    729729    nodeStack.append(expr2.get());
     
    780780// ------------------------------ DotAccessorNode --------------------------------
    781781
    782 void DotAccessorNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     782void DotAccessorNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    783783{
    784784    nodeStack.append(expr.get());
     
    828828// ------------------------------ ArgumentListNode -----------------------------
    829829
    830 void ArgumentListNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     830void ArgumentListNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    831831{
    832832    if (next)
     
    848848// ------------------------------ ArgumentsNode --------------------------------
    849849
    850 void ArgumentsNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     850void ArgumentsNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    851851{
    852852    if (listNode)
     
    856856// ------------------------------ NewExprNode ----------------------------------
    857857
    858 void NewExprNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     858void NewExprNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    859859{
    860860    if (args)
     
    919919}   
    920920
    921 void FunctionCallValueNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     921void FunctionCallValueNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    922922{
    923923    nodeStack.append(args.get());
     
    950950}
    951951
    952 void FunctionCallResolveNode::optimizeVariableAccess(FunctionBodyNode* functionBody, DeclarationStacks::NodeStack& nodeStack)
     952void FunctionCallResolveNode::optimizeVariableAccess(SymbolTable& symbolTable, DeclarationStacks::NodeStack& nodeStack)
    953953{
    954954    nodeStack.append(args.get());
    955955
    956     size_t index = functionBody->symbolTable().get(ident.ustring().rep());
     956    size_t index = symbolTable.get(ident.ustring().rep());
    957957    if (index != missingSymbolMarker())
    958958        new (this) LocalVarFunctionCallNode(index);
     
    10961096}
    10971097
    1098 void FunctionCallBracketNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     1098void FunctionCallBracketNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    10991099{
    11001100    nodeStack.append(args.get());
     
    11651165}
    11661166
    1167 void FunctionCallDotNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     1167void FunctionCallDotNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    11681168{
    11691169    nodeStack.append(args.get());
     
    12401240
    12411241// Increment
    1242 void PostIncResolveNode::optimizeVariableAccess(FunctionBodyNode* functionBody, DeclarationStacks::NodeStack&)
    1243 {
    1244     size_t index = functionBody->symbolTable().get(m_ident.ustring().rep());
     1242void PostIncResolveNode::optimizeVariableAccess(SymbolTable& symbolTable, DeclarationStacks::NodeStack&)
     1243{
     1244    size_t index = symbolTable.get(m_ident.ustring().rep());
    12451245    if (index != missingSymbolMarker())
    12461246        new (this) PostIncLocalVarNode(index);
     
    12971297
    12981298// Decrement
    1299 void PostDecResolveNode::optimizeVariableAccess(FunctionBodyNode* functionBody, DeclarationStacks::NodeStack&)
    1300 {
    1301     size_t index = functionBody->symbolTable().get(m_ident.ustring().rep());
     1299void PostDecResolveNode::optimizeVariableAccess(SymbolTable& symbolTable, DeclarationStacks::NodeStack&)
     1300{
     1301    size_t index = symbolTable.get(m_ident.ustring().rep());
    13021302    if (index != missingSymbolMarker())
    13031303        new (this) PostDecLocalVarNode(index);
     
    13841384// ------------------------------ PostfixBracketNode ----------------------------------
    13851385
    1386 void PostfixBracketNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     1386void PostfixBracketNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    13871387{
    13881388    nodeStack.append(m_subscript.get());
     
    14531453// ------------------------------ PostfixDotNode ----------------------------------
    14541454
    1455 void PostfixDotNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     1455void PostfixDotNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    14561456{
    14571457    nodeStack.append(m_base.get());
     
    15001500// ------------------------------ DeleteResolveNode -----------------------------------
    15011501
    1502 void DeleteResolveNode::optimizeVariableAccess(FunctionBodyNode* functionBody, DeclarationStacks::NodeStack&)
    1503 {
    1504     size_t index = functionBody->symbolTable().get(m_ident.ustring().rep());
     1502void DeleteResolveNode::optimizeVariableAccess(SymbolTable& symbolTable, DeclarationStacks::NodeStack&)
     1503{
     1504    size_t index = symbolTable.get(m_ident.ustring().rep());
    15051505    if (index != missingSymbolMarker())
    15061506        new (this) LocalVarDeleteNode();
     
    15421542// ------------------------------ DeleteBracketNode -----------------------------------
    15431543
    1544 void DeleteBracketNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     1544void DeleteBracketNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    15451545{
    15461546    nodeStack.append(m_subscript.get());
     
    15671567// ------------------------------ DeleteDotNode -----------------------------------
    15681568
    1569 void DeleteDotNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     1569void DeleteDotNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    15701570{
    15711571    nodeStack.append(m_base.get());
     
    15831583// ------------------------------ DeleteValueNode -----------------------------------
    15841584
    1585 void DeleteValueNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     1585void DeleteValueNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    15861586{
    15871587    nodeStack.append(m_expr.get());
     
    15991599// ------------------------------ VoidNode -------------------------------------
    16001600
    1601 void VoidNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     1601void VoidNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    16021602{
    16031603    nodeStack.append(expr.get());
     
    16171617// ------------------------------ TypeOfValueNode -----------------------------------
    16181618
    1619 void TypeOfValueNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     1619void TypeOfValueNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    16201620{
    16211621    nodeStack.append(m_expr.get());
     
    16501650}
    16511651
    1652 void TypeOfResolveNode::optimizeVariableAccess(FunctionBodyNode* functionBody, DeclarationStacks::NodeStack&)
    1653 {
    1654     size_t index = functionBody->symbolTable().get(m_ident.ustring().rep());
     1652void TypeOfResolveNode::optimizeVariableAccess(SymbolTable& symbolTable, DeclarationStacks::NodeStack&)
     1653{
     1654    size_t index = symbolTable.get(m_ident.ustring().rep());
    16551655    if (index != missingSymbolMarker())
    16561656        new (this) LocalVarTypeOfNode(index);
     
    17021702// ------------------------------ PrefixResolveNode ----------------------------------
    17031703
    1704 void PreIncResolveNode::optimizeVariableAccess(FunctionBodyNode* functionBody, DeclarationStacks::NodeStack&)
    1705 {
    1706     size_t index = functionBody->symbolTable().get(m_ident.ustring().rep());
     1704void PreIncResolveNode::optimizeVariableAccess(SymbolTable& symbolTable, DeclarationStacks::NodeStack&)
     1705{
     1706    size_t index = symbolTable.get(m_ident.ustring().rep());
    17071707    if (index != missingSymbolMarker())
    17081708        new (this) PreIncLocalVarNode(index);
     
    17491749}
    17501750
    1751 void PreDecResolveNode::optimizeVariableAccess(FunctionBodyNode* functionBody, DeclarationStacks::NodeStack&)
    1752 {
    1753     size_t index = functionBody->symbolTable().get(m_ident.ustring().rep());
     1751void PreDecResolveNode::optimizeVariableAccess(SymbolTable& symbolTable, DeclarationStacks::NodeStack&)
     1752{
     1753    size_t index = symbolTable.get(m_ident.ustring().rep());
    17541754    if (index != missingSymbolMarker())
    17551755        new (this) PreDecLocalVarNode(index);
     
    17981798// ------------------------------ PrefixBracketNode ----------------------------------
    17991799
    1800 void PrefixBracketNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     1800void PrefixBracketNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    18011801{
    18021802    nodeStack.append(m_subscript.get());
     
    18701870// ------------------------------ PrefixDotNode ----------------------------------
    18711871
    1872 void PrefixDotNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     1872void PrefixDotNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    18731873{
    18741874    nodeStack.append(m_base.get());
     
    19211921// ------------------------------ UnaryPlusNode --------------------------------
    19221922
    1923 void UnaryPlusNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     1923void UnaryPlusNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    19241924{
    19251925    nodeStack.append(m_expr.get());
     
    19561956// ------------------------------ NegateNode -----------------------------------
    19571957
    1958 void NegateNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     1958void NegateNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    19591959{
    19601960    nodeStack.append(expr.get());
     
    19761976// ------------------------------ BitwiseNotNode -------------------------------
    19771977
    1978 void BitwiseNotNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     1978void BitwiseNotNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    19791979{
    19801980    nodeStack.append(expr.get());
     
    20142014// ------------------------------ LogicalNotNode -------------------------------
    20152015
    2016 void LogicalNotNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     2016void LogicalNotNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    20172017{
    20182018    nodeStack.append(expr.get());
     
    20322032// ------------------------------ Multiplicative Nodes -----------------------------------
    20332033
    2034 void MultNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     2034void MultNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    20352035{
    20362036    nodeStack.append(term1.get());
     
    20722072}
    20732073
    2074 void DivNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     2074void DivNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    20752075{
    20762076    nodeStack.append(term1.get());
     
    21072107}
    21082108
    2109 void ModNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     2109void ModNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    21102110{
    21112111    nodeStack.append(term1.get());
     
    22442244}
    22452245
    2246 void AddNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     2246void AddNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    22472247{
    22482248    nodeStack.append(term1.get());
     
    23512351}
    23522352
    2353 void SubNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     2353void SubNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    23542354{
    23552355    nodeStack.append(term1.get());
     
    23882388// ------------------------------ Shift Nodes ------------------------------------
    23892389
    2390 void LeftShiftNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     2390void LeftShiftNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    23912391{
    23922392    nodeStack.append(term1.get());
     
    24232423}
    24242424
    2425 void RightShiftNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     2425void RightShiftNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    24262426{
    24272427    nodeStack.append(term1.get());
     
    24582458}
    24592459
    2460 void UnsignedRightShiftNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     2460void UnsignedRightShiftNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    24612461{
    24622462    nodeStack.append(term1.get());
     
    25252525}
    25262526
    2527 void LessNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     2527void LessNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    25282528{
    25292529    nodeStack.append(expr2.get());
     
    25872587}
    25882588
    2589 void GreaterNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     2589void GreaterNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    25902590{
    25912591    nodeStack.append(expr2.get());
     
    26132613}
    26142614
    2615 void LessEqNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     2615void LessEqNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    26162616{
    26172617    nodeStack.append(expr2.get());
     
    26392639}
    26402640
    2641 void GreaterEqNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     2641void GreaterEqNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    26422642{
    26432643    nodeStack.append(expr2.get());
     
    26652665}
    26662666
    2667 void InstanceOfNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     2667void InstanceOfNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    26682668{
    26692669    nodeStack.append(expr2.get());
     
    27182718}
    27192719
    2720 void InNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     2720void InNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    27212721{
    27222722    nodeStack.append(expr2.get());
     
    27552755// ------------------------------ Equality Nodes ------------------------------------
    27562756
    2757 void EqualNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     2757void EqualNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    27582758{
    27592759    nodeStack.append(expr2.get());
     
    27822782}
    27832783
    2784 void NotEqualNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     2784void NotEqualNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    27852785{
    27862786    nodeStack.append(expr2.get());
     
    28092809}
    28102810
    2811 void StrictEqualNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     2811void StrictEqualNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    28122812{
    28132813    nodeStack.append(expr2.get());
     
    28362836}
    28372837
    2838 void NotStrictEqualNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     2838void NotStrictEqualNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    28392839{
    28402840    nodeStack.append(expr2.get());
     
    28652865// ------------------------------ Bit Operation Nodes ----------------------------------
    28662866
    2867 void BitAndNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     2867void BitAndNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    28682868{
    28692869    nodeStack.append(expr2.get());
     
    29102910}
    29112911
    2912 void BitXOrNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     2912void BitXOrNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    29132913{
    29142914    nodeStack.append(expr2.get());
     
    29492949}
    29502950
    2951 void BitOrNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     2951void BitOrNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    29522952{
    29532953    nodeStack.append(expr2.get());
     
    29902990// ------------------------------ Binary Logical Nodes ----------------------------
    29912991
    2992 void LogicalAndNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     2992void LogicalAndNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    29932993{
    29942994    nodeStack.append(expr2.get());
     
    30173017}
    30183018
    3019 void LogicalOrNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     3019void LogicalOrNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    30203020{
    30213021    nodeStack.append(expr2.get());
     
    30413041// ------------------------------ ConditionalNode ------------------------------
    30423042
    3043 void ConditionalNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     3043void ConditionalNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    30443044{
    30453045    nodeStack.append(expr2.get());
     
    31523152// ------------------------------ ReadModifyResolveNode -----------------------------------
    31533153
    3154 void ReadModifyResolveNode::optimizeVariableAccess(FunctionBodyNode* functionBody, DeclarationStacks::NodeStack& nodeStack)
     3154void ReadModifyResolveNode::optimizeVariableAccess(SymbolTable& symbolTable, DeclarationStacks::NodeStack& nodeStack)
    31553155{
    31563156    nodeStack.append(m_right.get());
    3157     size_t index = functionBody->symbolTable().get(m_ident.ustring().rep());
     3157    size_t index = symbolTable.get(m_ident.ustring().rep());
    31583158    if (index != missingSymbolMarker())
    31593159        new (this) ReadModifyLocalVarNode(index);
    31603160}
    31613161
    3162 void AssignResolveNode::optimizeVariableAccess(FunctionBodyNode* functionBody, DeclarationStacks::NodeStack& nodeStack)
     3162void AssignResolveNode::optimizeVariableAccess(SymbolTable& symbolTable, DeclarationStacks::NodeStack& nodeStack)
    31633163{
    31643164    nodeStack.append(m_right.get());
    3165     size_t index = functionBody->symbolTable().get(m_ident.ustring().rep());
     3165    size_t index = symbolTable.get(m_ident.ustring().rep());
    31663166    if (index != missingSymbolMarker())
    31673167        new (this) AssignLocalVarNode(index);
     
    32613261// ------------------------------ ReadModifyDotNode -----------------------------------
    32623262
    3263 void AssignDotNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     3263void AssignDotNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    32643264{
    32653265    nodeStack.append(m_right.get());
     
    32813281}
    32823282
    3283 void ReadModifyDotNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     3283void ReadModifyDotNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    32843284{
    32853285    nodeStack.append(m_right.get());
     
    33183318// ------------------------------ AssignBracketNode -----------------------------------
    33193319
    3320 void AssignBracketNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     3320void AssignBracketNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    33213321{
    33223322    nodeStack.append(m_right.get());
     
    33503350  return v;
    33513351}
    3352 void ReadModifyBracketNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     3352void ReadModifyBracketNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    33533353{
    33543354    nodeStack.append(m_right.get());
     
    33983398// ------------------------------ CommaNode ------------------------------------
    33993399
    3400 void CommaNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     3400void CommaNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    34013401{
    34023402    nodeStack.append(expr2.get());
     
    34143414// ------------------------------ AssignExprNode -------------------------------
    34153415
    3416 void AssignExprNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     3416void AssignExprNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    34173417{
    34183418    nodeStack.append(expr.get());
     
    34553455}
    34563456
    3457 void VarDeclNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     3457void VarDeclNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    34583458{
    34593459    if (next)
     
    35603560// ------------------------------ VarStatementNode -----------------------------
    35613561
    3562 void VarStatementNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     3562void VarStatementNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    35633563{
    35643564    ASSERT(next);
     
    36713671}
    36723672
    3673 void BlockNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     3673void BlockNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    36743674{
    36753675    statementListPushFIFO(*m_children, nodeStack);
     
    36973697// ------------------------------ ExprStatementNode ----------------------------
    36983698
    3699 void ExprStatementNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     3699void ExprStatementNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    37003700{
    37013701    ASSERT(expr);
     
    37163716// ------------------------------ IfNode ---------------------------------------
    37173717
    3718 void IfNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     3718void IfNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    37193719{
    37203720    if (statement2)
     
    37563756// ------------------------------ DoWhileNode ----------------------------------
    37573757
    3758 void DoWhileNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     3758void DoWhileNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    37593759{
    37603760    nodeStack.append(statement.get());
     
    38043804// ------------------------------ WhileNode ------------------------------------
    38053805
    3806 void WhileNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     3806void WhileNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    38073807{
    38083808    nodeStack.append(statement.get());
     
    38523852// ------------------------------ ForNode --------------------------------------
    38533853
    3854 void ForNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     3854void ForNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    38553855{
    38563856    nodeStack.append(statement.get());
     
    39313931}
    39323932
    3933 void ForInNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     3933void ForInNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    39343934{
    39353935    nodeStack.append(statement.get());
     
    40784078// ------------------------------ ReturnNode -----------------------------------
    40794079
    4080 void ReturnNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     4080void ReturnNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    40814081{
    40824082    if (value)
     
    41104110}
    41114111
    4112 void WithNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     4112void WithNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    41134113{
    41144114    // Can't optimize within statement because "with" introduces a dynamic scope.
     
    41344134// ------------------------------ CaseClauseNode -------------------------------
    41354135
    4136 void CaseClauseNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     4136void CaseClauseNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    41374137{
    41384138    if (expr)
     
    41684168// ------------------------------ ClauseListNode -------------------------------
    41694169
    4170 void ClauseListNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     4170void ClauseListNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    41714171{
    41724172    if (next)
     
    41934193}
    41944194 
    4195 void CaseBlockNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     4195void CaseBlockNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    41964196{
    41974197    if (list2)
     
    42784278// ------------------------------ SwitchNode -----------------------------------
    42794279
    4280 void SwitchNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     4280void SwitchNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    42814281{
    42824282    nodeStack.append(block.get());
     
    43094309// ------------------------------ LabelNode ------------------------------------
    43104310
    4311 void LabelNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     4311void LabelNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    43124312{
    43134313    nodeStack.append(statement.get());
     
    43354335// ------------------------------ ThrowNode ------------------------------------
    43364336
    4337 void ThrowNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     4337void ThrowNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    43384338{
    43394339    nodeStack.append(expr.get());
     
    43544354// ------------------------------ TryNode --------------------------------------
    43554355
    4356 void TryNode::optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack& nodeStack)
     4356void TryNode::optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack& nodeStack)
    43574357{
    43584358    // Can't optimize within catchBlock because "catch" introduces a dynamic scope.
     
    44614461   
    44624462    while (true) {
    4463         node->optimizeVariableAccess(this, nodeStack);
     4463        node->optimizeVariableAccess(m_symbolTable, nodeStack);
    44644464       
    44654465        size_t size = nodeStack.size();
  • trunk/JavaScriptCore/kjs/nodes.h

    r28540 r28551  
    134134   
    135135    // Used for iterative, depth-first traversal of the node tree. Does not cross function call boundaries.
    136     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL { }
     136    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL { }
    137137
    138138  protected:
     
    310310    }
    311311
    312     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     312    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    313313
    314314    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     
    355355    virtual Precedence precedence() const { ASSERT_NOT_REACHED(); return PrecExpression; }
    356356    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    357     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     357    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    358358
    359359    PassRefPtr<ElementNode> releaseNext() KJS_FAST_CALL { return next.release(); }
     
    375375    ArrayNode(int eli, ElementNode* ele) KJS_FAST_CALL
    376376      : element(ele), elision(eli), opt(true) { }
    377     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     377    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    378378    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    379379    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    390390    PropertyNode(const Identifier& n, ExpressionNode* a, Type t) KJS_FAST_CALL
    391391      : m_name(n), assign(a), type(t) { }
    392     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     392    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    393393    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    394394    virtual Precedence precedence() const { ASSERT_NOT_REACHED(); return PrecExpression; }
     
    410410    PropertyListNode(PropertyNode* n, PropertyListNode* l) KJS_FAST_CALL
    411411      : node(n) { l->next = this; }
    412     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     412    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    413413    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    414414    virtual Precedence precedence() const { ASSERT_NOT_REACHED(); return PrecExpression; }
     
    427427    ObjectLiteralNode() KJS_FAST_CALL { }
    428428    ObjectLiteralNode(PropertyListNode* l) KJS_FAST_CALL : list(l) { }
    429     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     429    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    430430    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    431431    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    438438  public:
    439439    BracketAccessorNode(ExpressionNode* e1, ExpressionNode* e2) KJS_FAST_CALL : expr1(e1), expr2(e2) {}
    440     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     440    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    441441    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    442442    virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL;
     
    461461  public:
    462462    DotAccessorNode(ExpressionNode* e, const Identifier& s) KJS_FAST_CALL : expr(e), ident(s) { }
    463     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     463    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    464464    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    465465    virtual bool evaluateToBoolean(ExecState*) KJS_FAST_CALL;
     
    486486    ArgumentListNode(ArgumentListNode* l, ExpressionNode* e) KJS_FAST_CALL
    487487      : expr(e) { l->next = this; }
    488     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     488    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    489489    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    490490    virtual Precedence precedence() const { ASSERT_NOT_REACHED(); return PrecExpression; }
     
    504504    ArgumentsNode(ArgumentListNode* l) KJS_FAST_CALL
    505505      : listNode(l) { }
    506     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     506    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    507507    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    508508    virtual Precedence precedence() const { ASSERT_NOT_REACHED(); return PrecExpression; }
     
    518518    NewExprNode(ExpressionNode* e) KJS_FAST_CALL : expr(e) {}
    519519    NewExprNode(ExpressionNode* e, ArgumentsNode* a) KJS_FAST_CALL : expr(e), args(a) {}
    520     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     520    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    521521    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    522522    virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL;
     
    535535  public:
    536536    FunctionCallValueNode(ExpressionNode* e, ArgumentsNode* a) KJS_FAST_CALL : expr(e), args(a) {}
    537     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     537    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    538538    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    539539    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    559559    }
    560560
    561     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     561    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    562562    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    563563    virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL;
     
    596596  public:
    597597    FunctionCallBracketNode(ExpressionNode* b, ExpressionNode* s, ArgumentsNode* a) KJS_FAST_CALL : base(b), subscript(s), args(a) {}
    598     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     598    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    599599    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    600600    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    609609  public:
    610610    FunctionCallDotNode(ExpressionNode* b, const Identifier& i, ArgumentsNode* a) KJS_FAST_CALL : base(b), ident(i), args(a) {}
    611     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     611    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    612612    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    613613    virtual bool evaluateToBoolean(ExecState*) KJS_FAST_CALL;
     
    648648    }
    649649
    650     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     650    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    651651    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    652652    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    678678    }
    679679
    680     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     680    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    681681    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    682682    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    707707  public:
    708708    PostfixBracketNode(ExpressionNode* b, ExpressionNode* s) KJS_FAST_CALL : m_base(b), m_subscript(s) {}
    709     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     709    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    710710    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    711711    virtual Precedence precedence() const { return PrecPostfix; }
     
    735735  public:
    736736    PostfixDotNode(ExpressionNode* b, const Identifier& i) KJS_FAST_CALL : m_base(b), m_ident(i) {}
    737     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     737    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    738738    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    739739    virtual Precedence precedence() const { return PrecPostfix; }
     
    780780    }
    781781
    782     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     782    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    783783    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    784784    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    801801  public:
    802802    DeleteBracketNode(ExpressionNode* base, ExpressionNode* subscript) KJS_FAST_CALL : m_base(base), m_subscript(subscript) {}
    803     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     803    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    804804    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    805805    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    813813  public:
    814814    DeleteDotNode(ExpressionNode* base, const Identifier& i) KJS_FAST_CALL : m_base(base), m_ident(i) {}
    815     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     815    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    816816    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    817817    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    825825  public:
    826826    DeleteValueNode(ExpressionNode* e) KJS_FAST_CALL : m_expr(e) {}
    827     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     827    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    828828    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    829829    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    836836  public:
    837837    VoidNode(ExpressionNode* e) KJS_FAST_CALL : expr(e) {}
    838     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     838    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    839839    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    840840    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    856856    }
    857857
    858     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     858    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    859859   
    860860    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     
    885885  public:
    886886    TypeOfValueNode(ExpressionNode* e) KJS_FAST_CALL : ExpressionNode(StringType), m_expr(e) {}
    887     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     887    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    888888    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    889889    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    905905    }
    906906   
    907     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     907    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    908908
    909909    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     
    936936    }
    937937   
    938     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     938    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    939939
    940940    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
     
    959959    PrefixBracketNode(ExpressionNode* b, ExpressionNode* s) KJS_FAST_CALL : m_base(b), m_subscript(s) {}
    960960   
    961     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     961    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    962962    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    963963    virtual Precedence precedence() const { return PrecUnary; }
     
    987987  public:
    988988    PrefixDotNode(ExpressionNode* b, const Identifier& i) KJS_FAST_CALL : m_base(b), m_ident(i) {}
    989     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     989    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    990990    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    991991    virtual Precedence precedence() const { return PrecPostfix; }
     
    10261026  public:
    10271027    UnaryPlusNode(ExpressionNode* e) KJS_FAST_CALL : ExpressionNode(NumberType), m_expr(e) {}
    1028     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     1028    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    10291029    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    10301030    virtual bool evaluateToBoolean(ExecState*) KJS_FAST_CALL;
     
    10411041  public:
    10421042    NegateNode(ExpressionNode* e) KJS_FAST_CALL : ExpressionNode(NumberType), expr(e) {}
    1043     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     1043    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    10441044    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    10451045    virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL;
     
    10531053  public:
    10541054    BitwiseNotNode(ExpressionNode* e) KJS_FAST_CALL : ExpressionNode(NumberType), expr(e) {}
    1055     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     1055    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    10561056    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    10571057    virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL;
     
    10691069  public:
    10701070    LogicalNotNode(ExpressionNode* e) KJS_FAST_CALL : ExpressionNode(BooleanType), expr(e) {}
    1071     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     1071    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    10721072    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    10731073    virtual bool evaluateToBoolean(ExecState*) KJS_FAST_CALL;
     
    10811081  public:
    10821082      MultNode(ExpressionNode* t1, ExpressionNode* t2) KJS_FAST_CALL : ExpressionNode(NumberType), term1(t1), term2(t2) {}
    1083       virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     1083      virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    10841084      virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    10851085      virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL;
     
    10981098  public:
    10991099      DivNode(ExpressionNode* t1, ExpressionNode* t2) KJS_FAST_CALL : ExpressionNode(NumberType), term1(t1), term2(t2) {}
    1100       virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     1100      virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    11011101      virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    11021102      virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL;
     
    11141114  public:
    11151115      ModNode(ExpressionNode* t1, ExpressionNode* t2) KJS_FAST_CALL : ExpressionNode(NumberType), term1(t1), term2(t2) {}
    1116       virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     1116      virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    11171117      virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    11181118      virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL;
     
    11311131  public:
    11321132    AddNode(ExpressionNode* t1, ExpressionNode* t2) KJS_FAST_CALL : term1(t1), term2(t2) {}
    1133     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     1133    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    11341134    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    11351135    virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL;
     
    11781178  public:
    11791179      SubNode(ExpressionNode* t1, ExpressionNode* t2) KJS_FAST_CALL : ExpressionNode(NumberType), term1(t1), term2(t2) {}
    1180       virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     1180      virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    11811181      virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    11821182      virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL;
     
    11951195    LeftShiftNode(ExpressionNode* t1, ExpressionNode* t2) KJS_FAST_CALL
    11961196      : ExpressionNode(NumberType), term1(t1), term2(t2) {}
    1197     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     1197    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    11981198    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    11991199    virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL;
     
    12121212    RightShiftNode(ExpressionNode* t1, ExpressionNode* t2) KJS_FAST_CALL
    12131213      : ExpressionNode(NumberType), term1(t1), term2(t2) {}
    1214     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     1214    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    12151215    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    12161216    virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL;
     
    12291229    UnsignedRightShiftNode(ExpressionNode* t1, ExpressionNode* t2) KJS_FAST_CALL
    12301230      : ExpressionNode(NumberType), term1(t1), term2(t2) {}
    1231     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     1231    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    12321232    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    12331233    virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL;
     
    12461246    LessNode(ExpressionNode* e1, ExpressionNode* e2) KJS_FAST_CALL
    12471247      : ExpressionNode(BooleanType), expr1(e1), expr2(e2) {}
    1248     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     1248    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    12491249    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    12501250    virtual bool evaluateToBoolean(ExecState*) KJS_FAST_CALL;
     
    12821282    GreaterNode(ExpressionNode* e1, ExpressionNode* e2) KJS_FAST_CALL :
    12831283      expr1(e1), expr2(e2) {}
    1284     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     1284    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    12851285    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    12861286    virtual bool evaluateToBoolean(ExecState*) KJS_FAST_CALL;
     
    12971297    LessEqNode(ExpressionNode* e1, ExpressionNode* e2) KJS_FAST_CALL :
    12981298      expr1(e1), expr2(e2) {}
    1299     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     1299    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    13001300    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    13011301    virtual bool evaluateToBoolean(ExecState*) KJS_FAST_CALL;
     
    13121312    GreaterEqNode(ExpressionNode* e1, ExpressionNode* e2) KJS_FAST_CALL :
    13131313      expr1(e1), expr2(e2) {}
    1314     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     1314    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    13151315    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    13161316    virtual bool evaluateToBoolean(ExecState*) KJS_FAST_CALL;
     
    13271327    InstanceOfNode(ExpressionNode* e1, ExpressionNode* e2) KJS_FAST_CALL
    13281328        : ExpressionNode(BooleanType), expr1(e1), expr2(e2) {}
    1329     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     1329    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    13301330    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    13311331    virtual bool evaluateToBoolean(ExecState*) KJS_FAST_CALL;
     
    13411341    InNode(ExpressionNode* e1, ExpressionNode* e2) KJS_FAST_CALL :
    13421342      expr1(e1), expr2(e2) {}
    1343     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     1343    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    13441344    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    13451345    virtual bool evaluateToBoolean(ExecState*) KJS_FAST_CALL;
     
    13551355    EqualNode(ExpressionNode* e1, ExpressionNode* e2) KJS_FAST_CALL
    13561356        : ExpressionNode(BooleanType), expr1(e1), expr2(e2) {}
    1357     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     1357    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    13581358    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    13591359    virtual bool evaluateToBoolean(ExecState*) KJS_FAST_CALL;
     
    13701370    NotEqualNode(ExpressionNode* e1, ExpressionNode* e2) KJS_FAST_CALL
    13711371        : ExpressionNode(BooleanType), expr1(e1), expr2(e2) {}
    1372     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     1372    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    13731373    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    13741374    virtual bool evaluateToBoolean(ExecState*) KJS_FAST_CALL;
     
    13851385    StrictEqualNode(ExpressionNode* e1, ExpressionNode* e2) KJS_FAST_CALL
    13861386        : ExpressionNode(BooleanType), expr1(e1), expr2(e2) {}
    1387     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     1387    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    13881388    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    13891389    virtual bool evaluateToBoolean(ExecState*) KJS_FAST_CALL;
     
    14001400    NotStrictEqualNode(ExpressionNode* e1, ExpressionNode* e2) KJS_FAST_CALL
    14011401        : ExpressionNode(BooleanType), expr1(e1), expr2(e2) {}
    1402     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     1402    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    14031403    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    14041404    virtual bool evaluateToBoolean(ExecState*) KJS_FAST_CALL;
     
    14151415    BitAndNode(ExpressionNode* e1, ExpressionNode* e2) KJS_FAST_CALL
    14161416        : ExpressionNode(NumberType), expr1(e1), expr2(e2) {}
    1417     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     1417    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    14181418    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    14191419    virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL;
     
    14331433    BitOrNode(ExpressionNode* e1, ExpressionNode* e2) KJS_FAST_CALL
    14341434        : ExpressionNode(NumberType), expr1(e1), expr2(e2) {}
    1435     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     1435    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    14361436    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    14371437    virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL;
     
    14511451    BitXOrNode(ExpressionNode* e1, ExpressionNode* e2) KJS_FAST_CALL
    14521452        : ExpressionNode(NumberType), expr1(e1), expr2(e2) {}
    1453     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     1453    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    14541454    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    14551455    virtual double evaluateToNumber(ExecState*) KJS_FAST_CALL;
     
    14721472    LogicalAndNode(ExpressionNode* e1, ExpressionNode* e2) KJS_FAST_CALL
    14731473        : ExpressionNode(BooleanType), expr1(e1), expr2(e2) {}
    1474     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     1474    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    14751475    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    14761476    virtual bool evaluateToBoolean(ExecState*) KJS_FAST_CALL;
     
    14871487    LogicalOrNode(ExpressionNode* e1, ExpressionNode* e2) KJS_FAST_CALL
    14881488        : ExpressionNode(BooleanType), expr1(e1), expr2(e2) {}
    1489     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     1489    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    14901490    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    14911491    virtual bool evaluateToBoolean(ExecState*) KJS_FAST_CALL;
     
    15051505    ConditionalNode(ExpressionNode*  l, ExpressionNode* e1, ExpressionNode* e2) KJS_FAST_CALL :
    15061506      logical(l), expr1(e1), expr2(e2) {}
    1507     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     1507    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    15081508    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    15091509    virtual bool evaluateToBoolean(ExecState*) KJS_FAST_CALL;
     
    15351535    }
    15361536
    1537     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     1537    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    15381538    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    15391539    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    15731573    }
    15741574
    1575     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     1575    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    15761576    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    15771577    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    15991599    ReadModifyBracketNode(ExpressionNode*  base, ExpressionNode*  subscript, Operator oper, ExpressionNode*  right) KJS_FAST_CALL
    16001600      : m_base(base), m_subscript(subscript), m_oper(oper), m_right(right) {}
    1601     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     1601    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    16021602    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    16031603    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    16141614    AssignBracketNode(ExpressionNode*  base, ExpressionNode*  subscript, ExpressionNode*  right) KJS_FAST_CALL
    16151615      : m_base(base), m_subscript(subscript), m_right(right) {}
    1616     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     1616    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    16171617    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    16181618    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    16281628    AssignDotNode(ExpressionNode*  base, const Identifier& ident, ExpressionNode*  right) KJS_FAST_CALL
    16291629      : m_base(base), m_ident(ident), m_right(right) {}
    1630     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     1630    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    16311631    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    16321632    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    16421642    ReadModifyDotNode(ExpressionNode*  base, const Identifier& ident, Operator oper, ExpressionNode*  right) KJS_FAST_CALL
    16431643      : m_base(base), m_ident(ident), m_oper(oper), m_right(right) {}
    1644     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     1644    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    16451645    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    16461646    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    16721672        e1->optimizeForUnnecessaryResult();
    16731673    }
    1674     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     1674    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    16751675    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    16761676    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    16841684  public:
    16851685    AssignExprNode(ExpressionNode* e) KJS_FAST_CALL : expr(e) {}
    1686     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     1686    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    16871687    virtual JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    16881688    virtual bool evaluateToBoolean(ExecState*) KJS_FAST_CALL;
     
    17001700    enum Type { Variable, Constant };
    17011701    VarDeclNode(const Identifier &id, AssignExprNode *in, Type t) KJS_FAST_CALL;
    1702     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     1702    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    17031703    virtual KJS::JSValue* evaluate(ExecState*) KJS_FAST_CALL;
    17041704    void evaluateSingle(ExecState*) KJS_FAST_CALL;
     
    17191719  public:
    17201720    VarStatementNode(VarDeclNode* l) KJS_FAST_CALL : next(l) { m_mayHaveDeclarations = true; }
    1721     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     1721    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    17221722    virtual Completion execute(ExecState*) KJS_FAST_CALL;
    17231723    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    17391739        return elems;
    17401740    }
    1741     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL { ASSERT_NOT_REACHED(); }
     1741    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL { ASSERT_NOT_REACHED(); }
    17421742    virtual Completion execute(ExecState*) KJS_FAST_CALL  { ASSERT_NOT_REACHED(); return Completion(); }
    17431743    virtual void streamTo(SourceStream&) const KJS_FAST_CALL  { ASSERT_NOT_REACHED(); }
     
    17511751  public:
    17521752    BlockNode(SourceElements* children) KJS_FAST_CALL;
    1753     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     1753    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    17541754    virtual Completion execute(ExecState*) KJS_FAST_CALL;
    17551755    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    17691769  public:
    17701770    ExprStatementNode(ExpressionNode* e) KJS_FAST_CALL : expr(e) { }
    1771     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     1771    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    17721772    virtual Completion execute(ExecState*) KJS_FAST_CALL;
    17731773    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    17801780    IfNode(ExpressionNode* e, StatementNode *s1, StatementNode *s2) KJS_FAST_CALL
    17811781      : expr(e), statement1(s1), statement2(s2) { m_mayHaveDeclarations = statement1->mayHaveDeclarations() || (statement2 && statement2->mayHaveDeclarations()); }
    1782     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     1782    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    17831783    virtual Completion execute(ExecState*) KJS_FAST_CALL;
    17841784    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    17931793  public:
    17941794    DoWhileNode(StatementNode *s, ExpressionNode* e) KJS_FAST_CALL : statement(s), expr(e) { m_mayHaveDeclarations = true; }
    1795     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     1795    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    17961796    virtual Completion execute(ExecState*) KJS_FAST_CALL;
    17971797    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    18051805  public:
    18061806    WhileNode(ExpressionNode* e, StatementNode *s) KJS_FAST_CALL : expr(e), statement(s) { m_mayHaveDeclarations = true; }
    1807     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     1807    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    18081808    virtual Completion execute(ExecState*) KJS_FAST_CALL;
    18091809    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    18261826    }
    18271827
    1828     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     1828    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    18291829    virtual Completion execute(ExecState*) KJS_FAST_CALL;
    18301830    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    18411841    ForInNode(ExpressionNode*  l, ExpressionNode* e, StatementNode *s) KJS_FAST_CALL;
    18421842    ForInNode(const Identifier &i, AssignExprNode *in, ExpressionNode* e, StatementNode *s) KJS_FAST_CALL;
    1843     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     1843    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    18441844    virtual Completion execute(ExecState*) KJS_FAST_CALL;
    18451845    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    18771877  public:
    18781878    ReturnNode(ExpressionNode* v) KJS_FAST_CALL : value(v) {}
    1879     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     1879    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    18801880    virtual Completion execute(ExecState*) KJS_FAST_CALL;
    18811881    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    18871887  public:
    18881888    WithNode(ExpressionNode* e, StatementNode* s) KJS_FAST_CALL : expr(e), statement(s) { m_mayHaveDeclarations = true; }
    1889     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     1889    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    18901890    virtual Completion execute(ExecState*) KJS_FAST_CALL;
    18911891    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    18991899  public:
    19001900    LabelNode(const Identifier &l, StatementNode *s) KJS_FAST_CALL : label(l), statement(s) { m_mayHaveDeclarations = true; }
    1901     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     1901    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    19021902    virtual Completion execute(ExecState*) KJS_FAST_CALL;
    19031903    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    19111911  public:
    19121912    ThrowNode(ExpressionNode* e) KJS_FAST_CALL : expr(e) {}
    1913     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     1913    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    19141914    virtual Completion execute(ExecState*) KJS_FAST_CALL;
    19151915    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    19221922    TryNode(StatementNode *b, const Identifier &e, StatementNode *c, StatementNode *f) KJS_FAST_CALL
    19231923      : tryBlock(b), exceptionIdent(e), catchBlock(c), finallyBlock(f) { m_mayHaveDeclarations = true; }
    1924     virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     1924    virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    19251925    virtual Completion execute(ExecState*) KJS_FAST_CALL;
    19261926    virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    20292029      CaseClauseNode(ExpressionNode* e, SourceElements* children) KJS_FAST_CALL
    20302030      : expr(e), m_children(children) { m_mayHaveDeclarations = true; }
    2031       virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     2031      virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    20322032      virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
    20332033      virtual void getDeclarations(DeclarationStacks&) KJS_FAST_CALL;
     
    20472047      ClauseListNode(ClauseListNode* n, CaseClauseNode* c) KJS_FAST_CALL
    20482048      : clause(c) { n->next = this; m_mayHaveDeclarations = true; }
    2049       virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     2049      virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    20502050      CaseClauseNode* getClause() const KJS_FAST_CALL { return clause.get(); }
    20512051      ClauseListNode* getNext() const KJS_FAST_CALL { return next.get(); }
     
    20632063  public:
    20642064      CaseBlockNode(ClauseListNode* l1, CaseClauseNode* d, ClauseListNode* l2) KJS_FAST_CALL;
    2065       virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     2065      virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    20662066      Completion evalBlock(ExecState *exec, JSValue *input) KJS_FAST_CALL;
    20672067      virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
     
    20772077  public:
    20782078      SwitchNode(ExpressionNode* e, CaseBlockNode *b) KJS_FAST_CALL : expr(e), block(b) { m_mayHaveDeclarations = true; }
    2079       virtual void optimizeVariableAccess(FunctionBodyNode*, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
     2079      virtual void optimizeVariableAccess(SymbolTable&, DeclarationStacks::NodeStack&) KJS_FAST_CALL;
    20802080      virtual Completion execute(ExecState*) KJS_FAST_CALL;
    20812081      virtual void streamTo(SourceStream&) const KJS_FAST_CALL;
Note: See TracChangeset for help on using the changeset viewer.