X-Git-Url: https://git.saurik.com/apple/javascriptcore.git/blobdiff_plain/14957cd040308e3eeec43d26bae5d76da13fcd85..1981f5dfe8d77d97469d20652f712a09400c48ed:/runtime/JSAPIValueWrapper.h diff --git a/runtime/JSAPIValueWrapper.h b/runtime/JSAPIValueWrapper.h index 38cbb56..21d7b21 100644 --- a/runtime/JSAPIValueWrapper.h +++ b/runtime/JSAPIValueWrapper.h @@ -24,6 +24,7 @@ #define JSAPIValueWrapper_h #include "JSCell.h" +#include "JSValue.h" #include "CallFrame.h" #include "Structure.h" @@ -32,31 +33,44 @@ namespace JSC { class JSAPIValueWrapper : public JSCell { friend JSValue jsAPIValueWrapper(ExecState*, JSValue); public: - JSValue value() const { return m_value.get(); } + typedef JSCell Base; - virtual bool isAPIValueWrapper() const { return true; } + JSValue value() const { return m_value.get(); } - static Structure* createStructure(JSGlobalData& globalData, JSValue prototype) + static Structure* createStructure(JSGlobalData& globalData, JSGlobalObject* globalObject, JSValue prototype) { - return Structure::create(globalData, prototype, TypeInfo(CompoundType, OverridesVisitChildren | OverridesGetPropertyNames), AnonymousSlotCount, &s_info); + return Structure::create(globalData, globalObject, prototype, TypeInfo(APIValueWrapperType, OverridesVisitChildren | OverridesGetPropertyNames), &s_info); } - static const ClassInfo s_info; + 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; + } - private: - JSAPIValueWrapper(ExecState* exec, JSValue value) - : JSCell(exec->globalData(), exec->globalData().apiWrapperStructure.get()) + protected: + void finishCreation(ExecState* exec, JSValue value) { + Base::finishCreation(exec->globalData()); m_value.set(exec->globalData(), this, value); ASSERT(!value.isCell()); } + 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