]> git.saurik.com Git - apple/javascriptcore.git/blobdiff - runtime/JSWrapperObject.h
JavaScriptCore-1218.33.tar.gz
[apple/javascriptcore.git] / runtime / JSWrapperObject.h
index 2a2e3c6ffdddabf0be3da80fb60f62b220c24455..f1b6d3286049ffd47a1cac108d917f9589b44463 100644 (file)
 #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