]> git.saurik.com Git - apple/javascriptcore.git/blobdiff - runtime/JSAPIValueWrapper.h
JavaScriptCore-7600.1.4.9.tar.gz
[apple/javascriptcore.git] / runtime / JSAPIValueWrapper.h
index e16fbbaf0ff4e78279cc1457469b8481277292f5..e1f2cd80478209c843b81179b85ff89d43829529 100644 (file)
 #ifndef JSAPIValueWrapper_h
 #define JSAPIValueWrapper_h
 
-#include <wtf/Platform.h>
-
+#include "JSCJSValue.h"
 #include "JSCell.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;
+
+        JSValue value() const { return m_value.get(); }
 
-        virtual bool isAPIValueWrapper() const { return true; }
+        static Structure* createStructure(VM& vm, JSGlobalObject* globalObject, JSValue prototype)
+        {
+            return Structure::create(vm, globalObject, prototype, TypeInfo(APIValueWrapperType, OverridesVisitChildren | OverridesGetPropertyNames), info());
+        }
+        
+        DECLARE_EXPORT_INFO;
+        
+        static JSAPIValueWrapper* create(ExecState* exec, JSValue value) 
+        {
+            VM& vm = exec->vm();
+            JSAPIValueWrapper* wrapper = new (NotNull, allocateCell<JSAPIValueWrapper>(vm.heap)) JSAPIValueWrapper(exec);
+            wrapper->finishCreation(vm, value);
+            return wrapper;
+        }
 
-        virtual JSValue toPrimitive(ExecState*, PreferredPrimitiveType) const;
-        virtual bool getPrimitiveNumber(ExecState*, double& number, JSValue&);
-        virtual bool toBoolean(ExecState*) const;
-        virtual double toNumber(ExecState*) const;
-        virtual UString toString(ExecState*) const;
-        virtual JSObject* toObject(ExecState*) const;
+    protected:
+        void finishCreation(VM& vm, JSValue value)
+        {
+            Base::finishCreation(vm);
+            m_value.set(vm, this, value);
+            ASSERT(!value.isCell());
+        }
 
     private:
-        JSAPIValueWrapper(JSValue value)
-            : JSCell(0)
-            , m_value(value)
+        JSAPIValueWrapper(ExecState* exec)
+            : JSCell(exec->vm(), exec->vm().apiWrapperStructure.get())
         {
         }
 
-        JSValue m_value;
+        WriteBarrier<Unknown> m_value;
     };
 
     inline JSValue jsAPIValueWrapper(ExecState* exec, JSValue value)
     {
-        return new (exec) JSAPIValueWrapper(value);
+        return JSAPIValueWrapper::create(exec, value);
     }
 
 } // namespace JSC