]> git.saurik.com Git - apple/javascriptcore.git/blob - runtime/JSDestructibleObject.h
JavaScriptCore-7600.1.4.11.8.tar.gz
[apple/javascriptcore.git] / runtime / JSDestructibleObject.h
1 #ifndef JSDestructibleObject_h
2 #define JSDestructibleObject_h
3
4 #include "JSObject.h"
5
6 namespace JSC {
7
8 struct ClassInfo;
9
10 class JSDestructibleObject : public JSNonFinalObject {
11 public:
12 typedef JSNonFinalObject Base;
13
14 static const bool needsDestruction = true;
15
16 const ClassInfo* classInfo() const { return m_classInfo; }
17
18 static ptrdiff_t classInfoOffset() { return OBJECT_OFFSETOF(JSDestructibleObject, m_classInfo); }
19
20 protected:
21 JSDestructibleObject(VM& vm, Structure* structure, Butterfly* butterfly = 0)
22 : JSNonFinalObject(vm, structure, butterfly)
23 , m_classInfo(structure->classInfo())
24 {
25 ASSERT(m_classInfo);
26 }
27
28 private:
29 const ClassInfo* m_classInfo;
30 };
31
32 inline const ClassInfo* JSCell::classInfo() const
33 {
34 MarkedBlock* block = MarkedBlock::blockFor(this);
35 if (block->destructorType() == MarkedBlock::Normal)
36 return static_cast<const JSDestructibleObject*>(this)->classInfo();
37 return structure(*block->vm())->classInfo();
38 }
39
40 } // namespace JSC
41
42 #endif