X-Git-Url: https://git.saurik.com/apple/javascriptcore.git/blobdiff_plain/ba379fdc102753d6be2c4d937058fe40257329fe..14957cd040308e3eeec43d26bae5d76da13fcd85:/runtime/StructureChain.cpp?ds=sidebyside diff --git a/runtime/StructureChain.cpp b/runtime/StructureChain.cpp index e83f626..89a0ec0 100644 --- a/runtime/StructureChain.cpp +++ b/runtime/StructureChain.cpp @@ -31,31 +31,35 @@ #include namespace JSC { + +ClassInfo StructureChain::s_info = { "StructureChain", 0, 0, 0 }; -StructureChain::StructureChain(Structure* head) +StructureChain::StructureChain(JSGlobalData& globalData, Structure* structure, Structure* head) + : JSCell(globalData, structure) { size_t size = 0; for (Structure* current = head; current; current = current->storedPrototype().isNull() ? 0 : asObject(current->storedPrototype())->structure()) ++size; - m_vector.set(new RefPtr[size + 1]); + m_vector = adoptArrayPtr(new WriteBarrier[size + 1]); size_t i = 0; for (Structure* current = head; current; current = current->storedPrototype().isNull() ? 0 : asObject(current->storedPrototype())->structure()) - m_vector[i++] = current; - m_vector[i] = 0; + m_vector[i++].set(globalData, this, current); + m_vector[i].clear(); } -bool StructureChain::isCacheable() const +StructureChain::~StructureChain() { - uint32_t i = 0; - - while (m_vector[i]) { - // Both classes of dictionary structure may change arbitrarily so we can't cache them - if (m_vector[i++]->isDictionary()) - return false; - } - return true; +} + +void StructureChain::visitChildren(SlotVisitor& visitor) +{ + ASSERT_GC_OBJECT_INHERITS(this, &s_info); + ASSERT(structure()->typeInfo().overridesVisitChildren()); + size_t i = 0; + while (m_vector[i]) + visitor.append(&m_vector[i++]); } } // namespace JSC