Ignore:
Timestamp:
Jun 23, 2009, 7:47:48 PM (16 years ago)
Author:
[email protected]
Message:

<rdar://problem/6992806> REGRESSION: Enumeration can skip new properties in cases of prototypes that have more than 64 (26593)
<https://bugs.webkit.org/show_bug.cgi?id=26593>

Reviewed by Gavin Barraclough.

Add tests to ensure we correctly invalidate caching that depends on structure chains
that include dictionaries.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/interpreter/Interpreter.cpp

    r44923 r45039  
    971971    }
    972972
     973    StructureChain* protoChain = structure->prototypeChain(callFrame);
     974    if (!protoChain->isCacheable()) {
     975        vPC[0] = getOpcode(op_put_by_id_generic);
     976        return;
     977    }
     978
    973979    // Structure transition, cache transition info
    974980    if (slot.type() == PutPropertySlot::NewProperty) {
     
    976982        vPC[4] = structure->previousID();
    977983        vPC[5] = structure;
    978         vPC[6] = structure->prototypeChain(callFrame);
     984        vPC[6] = protoChain;
    979985        vPC[7] = slot.cachedOffset();
    980986        codeBlock->refStructures(vPC);
     
    10781084    }
    10791085
     1086    StructureChain* protoChain = structure->prototypeChain(callFrame);
     1087    if (!protoChain->isCacheable()) {
     1088        vPC[0] = getOpcode(op_put_by_id_generic);
     1089        return;
     1090    }
     1091
    10801092    vPC[0] = getOpcode(op_get_by_id_chain);
    10811093    vPC[4] = structure;
    1082     vPC[5] = structure->prototypeChain(callFrame);
     1094    vPC[5] = protoChain;
    10831095    vPC[6] = count;
    10841096    vPC[7] = slot.cachedOffset();
Note: See TracChangeset for help on using the changeset viewer.