Changeset 172742 in webkit


Ignore:
Timestamp:
Aug 18, 2014 9:41:34 PM (10 years ago)
Author:
commit-queue@webkit.org
Message:

Unreviewed, rolling out r172741.
https://bugs.webkit.org/show_bug.cgi?id=136058

This change is breaking PLT. (Requested by mlam on #webkit).

Reverted changeset:

"REGRESSION(r172401): for-in optimization no longer works at
all"
https://bugs.webkit.org/show_bug.cgi?id=136056
http://trac.webkit.org/changeset/172741

Location:
trunk/Source/JavaScriptCore
Files:
3 deleted
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/ChangeLog

    r172741 r172742  
     12014-08-18  Commit Queue  <commit-queue@webkit.org>
     2
     3        Unreviewed, rolling out r172741.
     4        https://bugs.webkit.org/show_bug.cgi?id=136058
     5
     6        This change is breaking PLT. (Requested by mlam on #webkit).
     7
     8        Reverted changeset:
     9
     10        "REGRESSION(r172401): for-in optimization no longer works at
     11        all"
     12        https://bugs.webkit.org/show_bug.cgi?id=136056
     13        http://trac.webkit.org/changeset/172741
     14
    1152014-08-18  Filip Pizlo  <fpizlo@apple.com>
    216
  • trunk/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp

    r172741 r172742  
    14231423    for (size_t i = m_forInContextStack.size(); i > 0; i--) {
    14241424        ForInContext* context = m_forInContextStack[i - 1].get();
     1425        if (context->base() != base)
     1426            continue;
     1427
    14251428        if (context->local() != property)
    14261429            continue;
     
    25842587}
    25852588
    2586 void BytecodeGenerator::pushIndexedForInScope(RegisterID* localRegister, RegisterID* indexRegister)
     2589void BytecodeGenerator::pushIndexedForInScope(RegisterID* baseRegister, RegisterID* localRegister, RegisterID* indexRegister)
    25872590{
    25882591    if (!localRegister)
    25892592        return;
    2590     m_forInContextStack.append(std::make_unique<IndexedForInContext>(localRegister, indexRegister));
     2593    m_forInContextStack.append(std::make_unique<IndexedForInContext>(baseRegister, localRegister, indexRegister));
    25912594}
    25922595
     
    25982601}
    25992602
    2600 void BytecodeGenerator::pushStructureForInScope(RegisterID* localRegister, RegisterID* indexRegister, RegisterID* propertyRegister, RegisterID* enumeratorRegister)
     2603void BytecodeGenerator::pushStructureForInScope(RegisterID* baseRegister, RegisterID* localRegister, RegisterID* indexRegister, RegisterID* propertyRegister, RegisterID* enumeratorRegister)
    26012604{
    26022605    if (!localRegister)
    26032606        return;
    2604     m_forInContextStack.append(std::make_unique<StructureForInContext>(localRegister, indexRegister, propertyRegister, enumeratorRegister));
     2607    m_forInContextStack.append(std::make_unique<StructureForInContext>(baseRegister, localRegister, indexRegister, propertyRegister, enumeratorRegister));
    26052608}
    26062609
  • trunk/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h

    r172741 r172742  
    100100    class ForInContext {
    101101    public:
    102         ForInContext(RegisterID* localRegister)
    103             : m_localRegister(localRegister)
     102        ForInContext(RegisterID* baseRegister, RegisterID* localRegister)
     103            : m_baseRegister(baseRegister)
     104            , m_localRegister(localRegister)
    104105            , m_isValid(true)
    105106        {
     
    119120        virtual ForInContextType type() const = 0;
    120121
     122        RegisterID* base() const { return m_baseRegister.get(); }
    121123        RegisterID* local() const { return m_localRegister.get(); }
    122124
    123125    private:
     126        RefPtr<RegisterID> m_baseRegister;
    124127        RefPtr<RegisterID> m_localRegister;
    125128        bool m_isValid;
     
    128131    class StructureForInContext : public ForInContext {
    129132    public:
    130         StructureForInContext(RegisterID* localRegister, RegisterID* indexRegister, RegisterID* propertyRegister, RegisterID* enumeratorRegister)
    131             : ForInContext(localRegister)
     133        StructureForInContext(RegisterID* baseRegister, RegisterID* localRegister, RegisterID* indexRegister, RegisterID* propertyRegister, RegisterID* enumeratorRegister)
     134            : ForInContext(baseRegister, localRegister)
    132135            , m_indexRegister(indexRegister)
    133136            , m_propertyRegister(propertyRegister)
     
    153156    class IndexedForInContext : public ForInContext {
    154157    public:
    155         IndexedForInContext(RegisterID* localRegister, RegisterID* indexRegister)
    156             : ForInContext(localRegister)
     158        IndexedForInContext(RegisterID* baseRegister, RegisterID* localRegister, RegisterID* indexRegister)
     159            : ForInContext(baseRegister, localRegister)
    157160            , m_indexRegister(indexRegister)
    158161        {
     
    525528        void popFinallyContext();
    526529
    527         void pushIndexedForInScope(RegisterID* local, RegisterID* index);
     530        void pushIndexedForInScope(RegisterID* base, RegisterID* local, RegisterID* index);
    528531        void popIndexedForInScope(RegisterID* local);
    529         void pushStructureForInScope(RegisterID* local, RegisterID* index, RegisterID* property, RegisterID* enumerator);
     532        void pushStructureForInScope(RegisterID* base, RegisterID* local, RegisterID* index, RegisterID* property, RegisterID* enumerator);
    530533        void popStructureForInScope(RegisterID* local);
    531534        void invalidateForInContextForLocal(RegisterID* local);
  • trunk/Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp

    r172741 r172742  
    20712071        this->emitLoopHeader(generator, propertyName.get());
    20722072
    2073         generator.pushIndexedForInScope(local.get(), i.get());
     2073        generator.pushIndexedForInScope(base.get(), local.get(), i.get());
    20742074        generator.emitNode(dst, m_statement);
    20752075        generator.popIndexedForInScope(local.get());
     
    21052105        this->emitLoopHeader(generator, propertyName.get());
    21062106
    2107         generator.pushStructureForInScope(local.get(), i.get(), propertyName.get(), structureEnumerator.get());
     2107        generator.pushStructureForInScope(base.get(), local.get(), i.get(), propertyName.get(), structureEnumerator.get());
    21082108        generator.emitNode(dst, m_statement);
    21092109        generator.popStructureForInScope(local.get());
Note: See TracChangeset for help on using the changeset viewer.