Changeset 68223 in webkit for trunk/JavaScriptCore/parser


Ignore:
Timestamp:
Sep 23, 2010, 5:52:52 PM (15 years ago)
Author:
[email protected]
Message:

2010-09-23 Oliver Hunt <[email protected]>

Reviewed by Geoffrey Garen.

Delay construction of functions that aren't captured
https://bugs.webkit.org/show_bug.cgi?id=46433

If a function isn't captured by an activation there's no
way it can be accessed indirectly, so we can delay the
construction until it's used (similar to what we do with
arguments). We rename the existing op_init_arguments to
op_init_lazy_reg and removed its implicit handling of
the anonymous argument register, and make op_new_function
take a parameter to indicate whether it should null check
the target slot before creating the function object.

  • bytecode/CodeBlock.cpp: (JSC::CodeBlock::dump):
  • bytecode/Opcode.h:
  • bytecompiler/BytecodeGenerator.cpp: (JSC::BytecodeGenerator::BytecodeGenerator): (JSC::BytecodeGenerator::emitInitLazyRegister): (JSC::BytecodeGenerator::registerFor): (JSC::BytecodeGenerator::createLazyRegisterIfNecessary): (JSC::BytecodeGenerator::constRegisterFor): (JSC::BytecodeGenerator::emitNewFunction): (JSC::BytecodeGenerator::emitLazyNewFunction): (JSC::BytecodeGenerator::emitNewFunctionInternal):
  • bytecompiler/BytecodeGenerator.h:
  • interpreter/Interpreter.cpp: (JSC::Interpreter::privateExecute):
  • jit/JIT.cpp: (JSC::JIT::privateCompileMainPass):
  • jit/JIT.h:
  • jit/JITOpcodes.cpp: (JSC::JIT::emit_op_init_lazy_reg): (JSC::JIT::emit_op_new_func):
  • jit/JITOpcodes32_64.cpp: (JSC::JIT::emit_op_init_lazy_reg):
  • parser/Nodes.h: (JSC::ScopeNode::needsActivationForMoreThanVariables):
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/parser/Nodes.h

    r68171 r68223  
    14131413        void setUsesArguments() { m_features |= ArgumentsFeature; }
    14141414        bool usesThis() const { return m_features & ThisFeature; }
     1415        bool needsActivationForMoreThanVariables() const { ASSERT(m_data); return m_features & (EvalFeature | WithFeature | CatchFeature); }
    14151416        bool needsActivation() const { ASSERT(m_data); return (hasCapturedVariables()) || (m_features & (EvalFeature | WithFeature | CatchFeature)); }
    14161417        bool hasCapturedVariables() const { return !!m_data->m_capturedVariables.size(); }
Note: See TracChangeset for help on using the changeset viewer.