Ignore:
Timestamp:
Aug 5, 2015, 2:45:20 PM (10 years ago)
Author:
[email protected]
Message:

Bytecodegenerator emits crappy code for returns in a lexical scope.
https://bugs.webkit.org/show_bug.cgi?id=147688

Reviewed by Mark Lam.

When returning, we only need to emit complex pop scopes if we're in
a finally block. Otherwise, we can just return like normal. This saves
us from inefficiently emitting unnecessary pop scopes.

  • bytecompiler/BytecodeGenerator.h:

(JSC::BytecodeGenerator::isInFinallyBlock):
(JSC::BytecodeGenerator::hasFinaliser): Deleted.

  • bytecompiler/NodesCodegen.cpp:

(JSC::ReturnNode::emitBytecode):

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp

    r187969 r187991  
    25532553    RefPtr<RegisterID> returnRegister = m_value ? generator.emitNode(dst, m_value) : generator.emitLoad(dst, jsUndefined());
    25542554    generator.emitProfileType(returnRegister.get(), ProfileTypeBytecodeFunctionReturnStatement, divotStart(), divotEnd());
    2555     if (generator.labelScopeDepth()) {
     2555    if (generator.isInFinallyBlock()) {
    25562556        returnRegister = generator.emitMove(generator.newTemporary(), returnRegister.get());
    25572557        generator.emitPopScopes(generator.scopeRegister(), 0);
Note: See TracChangeset for help on using the changeset viewer.