bool run() { ASSERT(m_graph.m_form != SSA); BlockSet blocksThatNeedInvalidationPoints; for (BlockIndex blockIndex = m_graph.numBlocks(); blockIndex--;) { BasicBlock* block = m_graph.block(blockIndex); if (!block) continue; for (unsigned nodeIndex = 0; nodeIndex < block->size(); ++nodeIndex) handle(nodeIndex, block->at(nodeIndex)); // Note: this assumes that control flow occurs at bytecode instruction boundaries. if (m_originThatHadFire.isSet()) { for (unsigned i = block->numSuccessors(); i--;) blocksThatNeedInvalidationPoints.add(block->successor(i)); } m_insertionSet.execute(block); } for (BlockIndex blockIndex = m_graph.numBlocks(); blockIndex--;) { BasicBlock* block = m_graph.block(blockIndex); if (!blocksThatNeedInvalidationPoints.contains(block)) continue; insertInvalidationCheck(0, block->at(0)); m_insertionSet.execute(block); } return true; }
TextAutosizer::Supercluster* TextAutosizer::getSupercluster(const LayoutBlock* block) { Fingerprint fingerprint = m_fingerprintMapper.get(block); if (!fingerprint) return nullptr; BlockSet* roots = m_fingerprintMapper.getTentativeClusterRoots(fingerprint); if (!roots || roots->size() < 2 || !roots->contains(block)) return nullptr; SuperclusterMap::AddResult addResult = m_superclusters.add(fingerprint, PassOwnPtr<Supercluster>()); if (!addResult.isNewEntry) return addResult.storedValue->value.get(); Supercluster* supercluster = new Supercluster(roots); addResult.storedValue->value = adoptPtr(supercluster); return supercluster; }