Ignore:
Timestamp:
Aug 20, 2014, 1:47:45 PM (11 years ago)
Author:
[email protected]
Message:

Stop implicitly skipping a function's own activation when walking the scope chain
https://bugs.webkit.org/show_bug.cgi?id=136118

Reviewed by Geoffrey Garen.

Remove the current logic that implicitly skips a function's
own activation when walking the scope chain. This is ground
work for ensuring that all closed variable access is made
through the function's activation. This leads to a further
10% regression on earley, but we're already tracking the
overall performance regression.

  • bytecode/CodeBlock.cpp:

(JSC::CodeBlock::CodeBlock):

  • dfg/DFGAbstractInterpreterInlines.h:

(JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):

  • dfg/DFGByteCodeParser.cpp:

(JSC::DFG::ByteCodeParser::getScope):
(JSC::DFG::ByteCodeParser::parseBlock):

  • dfg/DFGClobberize.h:

(JSC::DFG::clobberize):

  • dfg/DFGDoesGC.cpp:

(JSC::DFG::doesGC):

  • dfg/DFGFixupPhase.cpp:

(JSC::DFG::FixupPhase::fixupNode):

  • dfg/DFGHeapLocation.cpp:

(WTF::printInternal):

  • dfg/DFGHeapLocation.h:
  • dfg/DFGNodeType.h:
  • dfg/DFGPredictionPropagationPhase.cpp:

(JSC::DFG::PredictionPropagationPhase::propagate):

  • dfg/DFGSafeToExecute.h:

(JSC::DFG::safeToExecute):

  • dfg/DFGSpeculativeJIT32_64.cpp:

(JSC::DFG::SpeculativeJIT::compile):

  • dfg/DFGSpeculativeJIT64.cpp:

(JSC::DFG::SpeculativeJIT::compile):

  • jit/JITPropertyAccess.cpp:

(JSC::JIT::emitResolveClosure):

  • llint/LowLevelInterpreter32_64.asm:
  • llint/LowLevelInterpreter64.asm:
  • runtime/JSScope.cpp:

(JSC::JSScope::abstractResolve):

  • runtime/JSScope.h:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp

    r172176 r172808  
    199199    void emitChecks(const ConstantStructureCheckVector&);
    200200
    201     Node* getScope(bool skipTop, unsigned skipCount);
     201    Node* getScope(unsigned skipCount);
    202202   
    203203    // Prepare to parse a block.
     
    20242024}
    20252025
    2026 Node* ByteCodeParser::getScope(bool skipTop, unsigned skipCount)
     2026Node* ByteCodeParser::getScope(unsigned skipCount)
    20272027{
    20282028    Node* localBase = get(VirtualRegister(JSStack::ScopeChain));
    2029     if (skipTop) {
    2030         ASSERT(!inlineCallFrame());
    2031         localBase = addToGraph(SkipTopScope, localBase);
    2032     }
    20332029    for (unsigned n = skipCount; n--;)
    20342030        localBase = addToGraph(SkipScope, localBase);
     
    29302926                    break;
    29312927                }
    2932                 set(VirtualRegister(dst),
    2933                     getScope(m_inlineStackTop->m_codeBlock->needsActivation(), depth));
     2928                set(VirtualRegister(dst), getScope(depth));
    29342929                break;
    29352930            }
Note: See TracChangeset for help on using the changeset viewer.