Changeset 164620 in webkit for trunk/Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h
- Timestamp:
- Feb 24, 2014, 6:02:50 PM (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h
r164424 r164620 1641 1641 set.addAll(node->multiGetByOffsetData().variants[i].structureSet()); 1642 1642 1643 filter( value, set);1643 filter(node->child1(), set); 1644 1644 forNode(node).makeHeapTop(); 1645 1645 break; … … 1649 1649 break; 1650 1650 } 1651 1651 1652 case MultiPutByOffset: { 1653 AbstractValue& value = forNode(node->child1()); 1654 ASSERT(!(value.m_type & ~SpecCell)); // Edge filtering should have already ensured this. 1655 1656 if (Structure* structure = value.bestProvenStructure()) { 1657 bool done = false; 1658 for (unsigned i = node->multiPutByOffsetData().variants.size(); i--;) { 1659 const PutByIdVariant& variant = node->multiPutByOffsetData().variants[i]; 1660 if (variant.oldStructure() != structure) 1661 continue; 1662 1663 if (variant.kind() == PutByIdVariant::Replace) { 1664 filter(node->child1(), structure); 1665 m_state.setFoundConstants(true); 1666 m_state.setHaveStructures(true); 1667 done = true; 1668 break; 1669 } 1670 1671 ASSERT(variant.kind() == PutByIdVariant::Transition); 1672 clobberStructures(clobberLimit); 1673 forNode(node->child1()).set(m_graph, variant.newStructure()); 1674 m_state.setFoundConstants(true); 1675 m_state.setHaveStructures(true); 1676 done = true; 1677 break; 1678 } 1679 if (done) 1680 break; 1681 } 1682 1683 clobberStructures(clobberLimit); 1684 1685 StructureSet newSet; 1686 for (unsigned i = node->multiPutByOffsetData().variants.size(); i--;) { 1687 const PutByIdVariant& variant = node->multiPutByOffsetData().variants[i]; 1688 if (variant.kind() == PutByIdVariant::Replace) { 1689 if (value.m_currentKnownStructure.contains(variant.structure())) 1690 newSet.addAll(variant.structure()); 1691 continue; 1692 } 1693 ASSERT(variant.kind() == PutByIdVariant::Transition); 1694 if (value.m_currentKnownStructure.contains(variant.oldStructure())) 1695 newSet.addAll(variant.newStructure()); 1696 } 1697 1698 // Use filter(value, set) as a way of setting the structure set. This works because 1699 // we would have already made the set be TOP before this. Filtering top is another 1700 // way of setting. 1701 filter(node->child1(), newSet); 1702 break; 1703 } 1704 1652 1705 case CheckFunction: { 1653 1706 JSValue value = forNode(node->child1()).value(); … … 1686 1739 m_graph.identifiers()[node->identifierNumber()], 1687 1740 node->op() == PutByIdDirect); 1688 if (status.isSimpleReplace()) { 1689 filter(node->child1(), structure); 1690 m_state.setFoundConstants(true); 1691 m_state.setHaveStructures(true); 1692 break; 1693 } 1694 if (status.isSimpleTransition()) { 1695 clobberStructures(clobberLimit); 1696 forNode(node->child1()).set(m_graph, status.newStructure()); 1697 m_state.setHaveStructures(true); 1698 m_state.setFoundConstants(true); 1699 break; 1741 if (status.isSimple() && status.numVariants() == 1) { 1742 if (status[0].kind() == PutByIdVariant::Replace) { 1743 filter(node->child1(), structure); 1744 m_state.setFoundConstants(true); 1745 m_state.setHaveStructures(true); 1746 break; 1747 } 1748 if (status[0].kind() == PutByIdVariant::Transition) { 1749 clobberStructures(clobberLimit); 1750 forNode(node->child1()).set(m_graph, status[0].newStructure()); 1751 m_state.setHaveStructures(true); 1752 m_state.setFoundConstants(true); 1753 break; 1754 } 1700 1755 } 1701 1756 }
Note:
See TracChangeset
for help on using the changeset viewer.