X-Git-Url: https://git.saurik.com/apple/javascriptcore.git/blobdiff_plain/9dae56ea45a0f5f8136a5c93d6f3a7f99399ca73..a253471d7f8e4d91bf6ebabab00155c3b387d3d0:/runtime/JSWrapperObject.h diff --git a/runtime/JSWrapperObject.h b/runtime/JSWrapperObject.h index 7381128..65b4bdb 100644 --- a/runtime/JSWrapperObject.h +++ b/runtime/JSWrapperObject.h @@ -25,34 +25,46 @@ #include "JSObject.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 { + class JSWrapperObject : public JSNonFinalObject { + public: + typedef JSNonFinalObject Base; + + JSValue internalValue() const; + void setInternalValue(JSGlobalData&, JSValue); + + static Structure* createStructure(JSGlobalData& globalData, JSGlobalObject* globalObject, JSValue prototype) + { + return Structure::create(globalData, globalObject, prototype, TypeInfo(ObjectType, StructureFlags), &s_info); + } + protected: - explicit JSWrapperObject(PassRefPtr); + explicit JSWrapperObject(JSGlobalData&, Structure*); + static const unsigned StructureFlags = OverridesVisitChildren | JSNonFinalObject::StructureFlags; + + static void visitChildren(JSCell*, SlotVisitor&); - public: - JSValuePtr internalValue() const { return m_internalValue; } - void setInternalValue(JSValuePtr); - - virtual void mark(); - private: - JSValuePtr m_internalValue; + WriteBarrier m_internalValue; }; - - inline JSWrapperObject::JSWrapperObject(PassRefPtr structure) - : JSObject(structure) - , m_internalValue(noValue()) + + inline JSWrapperObject::JSWrapperObject(JSGlobalData& globalData, Structure* structure) + : JSNonFinalObject(globalData, structure) + { + } + + inline JSValue JSWrapperObject::internalValue() const { + return m_internalValue.get(); } - - inline void JSWrapperObject::setInternalValue(JSValuePtr value) + + inline void JSWrapperObject::setInternalValue(JSGlobalData& globalData, JSValue value) { ASSERT(value); ASSERT(!value.isObject()); - m_internalValue = value; + m_internalValue.set(globalData, this, value); } } // namespace JSC