Changeset 50254 in webkit for trunk/JavaScriptCore/ChangeLog


Ignore:
Timestamp:
Oct 28, 2009, 6:25:02 PM (16 years ago)
Author:
[email protected]
Message:

Improve for..in enumeration performance
https://bugs.webkit.org/show_bug.cgi?id=30887

Reviewed by Geoff Garen.

Improve indexing of an object with a for..in iterator by
identifying cases where get_by_val is being used with a iterator
as the subscript and replace it with a new get_by_pname
bytecode. get_by_pname then optimizes lookups that directly access
the base object.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/ChangeLog

    r50248 r50254  
     12009-10-28  Oliver Hunt  <[email protected]>
     2
     3        Reviewed by Geoff Garen.
     4
     5        Improve for..in enumeration performance
     6        https://bugs.webkit.org/show_bug.cgi?id=30887
     7
     8        Improve indexing of an object with a for..in iterator by
     9        identifying cases where get_by_val is being used with a iterator
     10        as the subscript and replace it with a new get_by_pname
     11        bytecode.  get_by_pname then optimizes lookups that directly access
     12        the base object.
     13
     14        * bytecode/CodeBlock.cpp:
     15        (JSC::CodeBlock::dump):
     16        * bytecode/Opcode.h:
     17        * bytecompiler/BytecodeGenerator.cpp:
     18        (JSC::BytecodeGenerator::emitGetByVal):
     19        * bytecompiler/BytecodeGenerator.h:
     20        (JSC::BytecodeGenerator::pushOptimisedForIn):
     21        (JSC::BytecodeGenerator::popOptimisedForIn):
     22        * interpreter/Interpreter.cpp:
     23        (JSC::Interpreter::privateExecute):
     24        * jit/JIT.cpp:
     25        (JSC::JIT::privateCompileMainPass):
     26        (JSC::JIT::privateCompileSlowCases):
     27        * jit/JIT.h:
     28        * jit/JITPropertyAccess.cpp:
     29        (JSC::JIT::compileGetDirectOffset):
     30        (JSC::JIT::emit_op_get_by_pname):
     31        (JSC::JIT::emitSlow_op_get_by_pname):
     32        * parser/Nodes.cpp:
     33        (JSC::ForInNode::emitBytecode):
     34        * runtime/JSObject.h:
     35        * runtime/JSPropertyNameIterator.cpp:
     36        (JSC::JSPropertyNameIterator::create):
     37        * runtime/JSPropertyNameIterator.h:
     38        (JSC::JSPropertyNameIterator::getOffset):
     39        (JSC::JSPropertyNameIterator::JSPropertyNameIterator):
     40        * runtime/JSValue.h:
     41        (JSC::JSValue::):
     42        * runtime/Structure.cpp:
     43        (JSC::Structure::addPropertyTransition):
     44        (JSC::Structure::changePrototypeTransition):
     45        (JSC::Structure::despecifyFunctionTransition):
     46        (JSC::Structure::addAnonymousSlotsTransition):
     47        (JSC::Structure::getterSetterTransition):
     48        (JSC::Structure::toDictionaryTransition):
     49        (JSC::Structure::addPropertyWithoutTransition):
     50          Track the existence (or not) of non-enumerable properties.
     51        * runtime/Structure.h:
     52        (JSC::Structure::propertyStorageCapacity):
     53        (JSC::Structure::propertyStorageSize):
     54        (JSC::Structure::hasNonEnumerableProperties):
     55        (JSC::Structure::hasAnonymousSlots):
     56
    1572009-10-28  Dmitry Titov  <[email protected]>
    258
Note: See TracChangeset for help on using the changeset viewer.