X-Git-Url: https://git.saurik.com/apple/javascriptcore.git/blobdiff_plain/ba379fdc102753d6be2c4d937058fe40257329fe..12899fa232562c774004a3a9d7d3149944dec712:/runtime/JSWrapperObject.h diff --git a/runtime/JSWrapperObject.h b/runtime/JSWrapperObject.h index 2a2e3c6..f1b6d32 100644 --- a/runtime/JSWrapperObject.h +++ b/runtime/JSWrapperObject.h @@ -22,36 +22,65 @@ #ifndef JSWrapperObject_h #define JSWrapperObject_h -#include "JSObject.h" +#include "JSDestructibleObject.h" namespace JSC { - + // This class is used as a base for classes such as String, // Number, Boolean and Date which are wrappers for primitive types. - class JSWrapperObject : public JSObject { - protected: - explicit JSWrapperObject(PassRefPtr); - + class JSWrapperObject : public JSDestructibleObject { public: - JSValue internalValue() const { return m_internalValue; } - void setInternalValue(JSValue); - - virtual void mark(); + typedef JSDestructibleObject Base; + + static size_t allocationSize(size_t inlineCapacity) + { + ASSERT_UNUSED(inlineCapacity, !inlineCapacity); + return sizeof(JSWrapperObject); + } + + JSValue internalValue() const; + void setInternalValue(VM&, JSValue); + + static Structure* createStructure(VM& vm, JSGlobalObject* globalObject, JSValue prototype) + { + return Structure::create(vm, globalObject, prototype, TypeInfo(ObjectType, StructureFlags), &s_info); + } + static ptrdiff_t internalValueOffset() { return OBJECT_OFFSETOF(JSWrapperObject, m_internalValue); } + static ptrdiff_t internalValueCellOffset() + { +#if USE(JSVALUE64) + return internalValueOffset(); +#else + return internalValueOffset() + OBJECT_OFFSETOF(EncodedValueDescriptor, asBits.payload); +#endif + } + + protected: + explicit JSWrapperObject(VM&, Structure*); + static const unsigned StructureFlags = OverridesVisitChildren | Base::StructureFlags; + + static void visitChildren(JSCell*, SlotVisitor&); + private: - JSValue m_internalValue; + WriteBarrier m_internalValue; }; - - inline JSWrapperObject::JSWrapperObject(PassRefPtr structure) - : JSObject(structure) + + inline JSWrapperObject::JSWrapperObject(VM& vm, Structure* structure) + : JSDestructibleObject(vm, structure) { } - - inline void JSWrapperObject::setInternalValue(JSValue value) + + inline JSValue JSWrapperObject::internalValue() const + { + return m_internalValue.get(); + } + + inline void JSWrapperObject::setInternalValue(VM& vm, JSValue value) { ASSERT(value); ASSERT(!value.isObject()); - m_internalValue = value; + m_internalValue.set(vm, this, value); } } // namespace JSC