diff options
Diffstat (limited to 'Source/JavaScriptCore/runtime/StructureRareData.cpp')
-rw-r--r-- | Source/JavaScriptCore/runtime/StructureRareData.cpp | 37 |
1 files changed, 19 insertions, 18 deletions
diff --git a/Source/JavaScriptCore/runtime/StructureRareData.cpp b/Source/JavaScriptCore/runtime/StructureRareData.cpp index 20a5371e7..9e7265178 100644 --- a/Source/JavaScriptCore/runtime/StructureRareData.cpp +++ b/Source/JavaScriptCore/runtime/StructureRareData.cpp @@ -26,17 +26,17 @@ #include "config.h" #include "StructureRareData.h" -#include "JSPropertyNameEnumerator.h" +#include "JSPropertyNameIterator.h" #include "JSString.h" -#include "JSCInlines.h" +#include "Operations.h" namespace JSC { -const ClassInfo StructureRareData::s_info = { "StructureRareData", 0, 0, CREATE_METHOD_TABLE(StructureRareData) }; +const ClassInfo StructureRareData::s_info = { "StructureRareData", 0, 0, 0, CREATE_METHOD_TABLE(StructureRareData) }; Structure* StructureRareData::createStructure(VM& vm, JSGlobalObject* globalObject, JSValue prototype) { - return Structure::create(vm, globalObject, prototype, TypeInfo(CellType, StructureFlags), info()); + return Structure::create(vm, globalObject, prototype, TypeInfo(CompoundType, StructureFlags), info()); } StructureRareData* StructureRareData::create(VM& vm, Structure* previous) @@ -46,9 +46,11 @@ StructureRareData* StructureRareData::create(VM& vm, Structure* previous) return rareData; } -void StructureRareData::destroy(JSCell* cell) +StructureRareData* StructureRareData::clone(VM& vm, const StructureRareData* other) { - static_cast<StructureRareData*>(cell)->StructureRareData::~StructureRareData(); + StructureRareData* newRareData = new (NotNull, allocateCell<StructureRareData>(vm.heap)) StructureRareData(vm, other); + newRareData->finishCreation(vm); + return newRareData; } StructureRareData::StructureRareData(VM& vm, Structure* previous) @@ -58,26 +60,25 @@ StructureRareData::StructureRareData(VM& vm, Structure* previous) m_previous.set(vm, this, previous); } +StructureRareData::StructureRareData(VM& vm, const StructureRareData* other) + : JSCell(vm, other->structure()) +{ + if (other->previousID()) + m_previous.set(vm, this, other->previousID()); + if (other->objectToStringValue()) + m_objectToStringValue.set(vm, this, other->objectToStringValue()); +} + void StructureRareData::visitChildren(JSCell* cell, SlotVisitor& visitor) { StructureRareData* thisObject = jsCast<StructureRareData*>(cell); ASSERT_GC_OBJECT_INHERITS(thisObject, info()); + ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren()); JSCell::visitChildren(thisObject, visitor); visitor.append(&thisObject->m_previous); visitor.append(&thisObject->m_objectToStringValue); - visitor.append(&thisObject->m_cachedPropertyNameEnumerator); - visitor.append(&thisObject->m_cachedGenericPropertyNameEnumerator); -} - -JSPropertyNameEnumerator* StructureRareData::cachedPropertyNameEnumerator() const -{ - return m_cachedPropertyNameEnumerator.get(); -} - -void StructureRareData::setCachedPropertyNameEnumerator(VM& vm, JSPropertyNameEnumerator* enumerator) -{ - m_cachedPropertyNameEnumerator.set(vm, this, enumerator); + visitor.append(&thisObject->m_enumerationCache); } } // namespace JSC |