#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<Structure>);
-
+ 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<Unknown> m_internalValue;
};
-
- inline JSWrapperObject::JSWrapperObject(PassRefPtr<Structure> 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