X-Git-Url: https://git.saurik.com/apple/javascriptcore.git/blobdiff_plain/f9bf01c6616d5ddcf65b13b33cedf9e387ff7a63..14957cd040308e3eeec43d26bae5d76da13fcd85:/runtime/StructureChain.cpp?ds=inline diff --git a/runtime/StructureChain.cpp b/runtime/StructureChain.cpp index 085876c..89a0ec0 100644 --- a/runtime/StructureChain.cpp +++ b/runtime/StructureChain.cpp @@ -31,19 +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(); +} + +StructureChain::~StructureChain() +{ +} + +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