Ignore:
Timestamp:
Jun 14, 2008, 10:24:21 PM (17 years ago)
Author:
[email protected]
Message:

2008-06-14 Cameron Zwarich <[email protected]>

Reviewed by Maciej.

Make code generation not use a temporary for the left-hand side of an
expression if the right-hand side is a local variable.

  • VM/CodeGenerator.cpp: (KJS::CodeGenerator::isLocal):
  • VM/CodeGenerator.h: (KJS::CodeGenerator::leftHandSideNeedsCopy): (KJS::CodeGenerator::emitNodeForLeftHandSide):
  • kjs/nodes.cpp: (KJS::ResolveNode::isPure): (KJS::BracketAccessorNode::emitCode): (KJS::AddNode::emitCode): (KJS::SubNode::emitCode): (KJS::ReadModifyResolveNode::emitCode): (KJS::AssignDotNode::emitCode): (KJS::ReadModifyDotNode::emitCode): (KJS::AssignBracketNode::emitCode): (KJS::ReadModifyBracketNode::emitCode):
  • kjs/nodes.h: (KJS::ExpressionNode::): (KJS::BooleanNode::): (KJS::NumberNode::): (KJS::StringNode::):
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/VM/CodeGenerator.h

    r34528 r34555  
    109109        RegisterID* thisRegister() { return &m_thisRegister; }
    110110
     111        bool isLocal(const Identifier&);
    111112        bool isLocalConstant(const Identifier&);
    112113
     
    172173        }
    173174
    174         ALWAYS_INLINE bool leftHandSideNeedsCopy(bool rightHasAssignments, bool rightIsConstant)
    175         {
    176             return (m_codeType != FunctionCode || m_codeBlock->needsFullScopeChain || rightHasAssignments) && !rightIsConstant;
    177         }
    178 
    179         ALWAYS_INLINE PassRefPtr<RegisterID> emitNodeForLeftHandSide(ExpressionNode* n, bool rightHasAssignments, bool rightIsConstant)
    180         {
    181             if (leftHandSideNeedsCopy(rightHasAssignments, rightIsConstant)) {
     175        ALWAYS_INLINE bool leftHandSideNeedsCopy(bool rightHasAssignments, bool rightIsPure)
     176        {
     177            return (m_codeType != FunctionCode || m_codeBlock->needsFullScopeChain || rightHasAssignments) && !rightIsPure;
     178        }
     179
     180        ALWAYS_INLINE PassRefPtr<RegisterID> emitNodeForLeftHandSide(ExpressionNode* n, bool rightHasAssignments, bool rightIsPure)
     181        {
     182            if (leftHandSideNeedsCopy(rightHasAssignments, rightIsPure)) {
    182183                PassRefPtr<RegisterID> dst = newTemporary();
    183184                emitNode(dst.get(), n);
Note: See TracChangeset for help on using the changeset viewer.