X-Git-Url: https://git.saurik.com/apple/javascriptcore.git/blobdiff_plain/4e4e5a6f2694187498445a6ac6f1634ce8141119..1981f5dfe8d77d97469d20652f712a09400c48ed:/runtime/JSAPIValueWrapper.h diff --git a/runtime/JSAPIValueWrapper.h b/runtime/JSAPIValueWrapper.h index 10ded4c..21d7b21 100644 --- a/runtime/JSAPIValueWrapper.h +++ b/runtime/JSAPIValueWrapper.h @@ -24,37 +24,53 @@ #define JSAPIValueWrapper_h #include "JSCell.h" +#include "JSValue.h" #include "CallFrame.h" +#include "Structure.h" namespace JSC { class JSAPIValueWrapper : public JSCell { friend JSValue jsAPIValueWrapper(ExecState*, JSValue); public: - JSValue value() const { return m_value; } + typedef JSCell Base; - virtual bool isAPIValueWrapper() const { return true; } + JSValue value() const { return m_value.get(); } - static PassRefPtr createStructure(JSValue prototype) + static Structure* createStructure(JSGlobalData& globalData, JSGlobalObject* globalObject, JSValue prototype) { - return Structure::create(prototype, TypeInfo(CompoundType, OverridesMarkChildren | OverridesGetPropertyNames), AnonymousSlotCount); + return Structure::create(globalData, globalObject, prototype, TypeInfo(APIValueWrapperType, OverridesVisitChildren | OverridesGetPropertyNames), &s_info); } - - private: - JSAPIValueWrapper(ExecState* exec, JSValue value) - : JSCell(exec->globalData().apiWrapperStructure.get()) - , m_value(value) + static JS_EXPORTDATA const ClassInfo s_info; + + static JSAPIValueWrapper* create(ExecState* exec, JSValue value) + { + JSAPIValueWrapper* wrapper = new (NotNull, allocateCell(*exec->heap())) JSAPIValueWrapper(exec); + wrapper->finishCreation(exec, value); + return wrapper; + } + + protected: + void finishCreation(ExecState* exec, JSValue value) { + Base::finishCreation(exec->globalData()); + m_value.set(exec->globalData(), this, value); ASSERT(!value.isCell()); } - JSValue m_value; + private: + JSAPIValueWrapper(ExecState* exec) + : JSCell(exec->globalData(), exec->globalData().apiWrapperStructure.get()) + { + } + + WriteBarrier m_value; }; inline JSValue jsAPIValueWrapper(ExecState* exec, JSValue value) { - return new (exec) JSAPIValueWrapper(exec, value); + return JSAPIValueWrapper::create(exec, value); } } // namespace JSC