]> git.saurik.com Git - apple/javascriptcore.git/blobdiff - API/APIShims.h
JavaScriptCore-1218.34.tar.gz
[apple/javascriptcore.git] / API / APIShims.h
index 2e13851417044b463b9941a9a5ec87d19ce63b4b..d8e1fb79092ff38a3ad0afbc942f5b52e70b9827 100644 (file)
@@ -28,6 +28,7 @@
 
 #include "CallFrame.h"
 #include "GCActivityCallback.h"
+#include "IncrementalSweeper.h"
 #include "JSLock.h"
 #include <wtf/WTFThreadData.h>
 
@@ -35,27 +36,21 @@ namespace JSC {
 
 class APIEntryShimWithoutLock {
 protected:
-    APIEntryShimWithoutLock(JSGlobalData* globalData, bool registerThread)
-        : m_globalData(globalData)
-        , m_entryIdentifierTable(wtfThreadData().setCurrentIdentifierTable(globalData->identifierTable))
+    APIEntryShimWithoutLock(VM* vm, bool registerThread)
+        : m_vm(vm)
+        , m_entryIdentifierTable(wtfThreadData().setCurrentIdentifierTable(vm->identifierTable))
     {
-        UNUSED_PARAM(registerThread);
-#if ENABLE(JSC_MULTIPLE_THREADS)
         if (registerThread)
-            globalData->heap.machineThreads().addCurrentThread();
-#endif
-        m_globalData->heap.activityCallback()->synchronize();
-        m_globalData->timeoutChecker.start();
+            vm->heap.machineThreads().addCurrentThread();
     }
 
     ~APIEntryShimWithoutLock()
     {
-        m_globalData->timeoutChecker.stop();
         wtfThreadData().setCurrentIdentifierTable(m_entryIdentifierTable);
     }
 
-private:
-    JSGlobalData* m_globalData;
+protected:
+    RefPtr<VM> m_vm;
     IdentifierTable* m_entryIdentifierTable;
 };
 
@@ -63,40 +58,45 @@ class APIEntryShim : public APIEntryShimWithoutLock {
 public:
     // Normal API entry
     APIEntryShim(ExecState* exec, bool registerThread = true)
-        : APIEntryShimWithoutLock(&exec->globalData(), registerThread)
-        , m_lock(exec)
+        : APIEntryShimWithoutLock(&exec->vm(), registerThread)
+        , m_lockHolder(exec)
+    {
+    }
+
+    // JSPropertyNameAccumulator only has a vm.
+    APIEntryShim(VM* vm, bool registerThread = true)
+        : APIEntryShimWithoutLock(vm, registerThread)
+        , m_lockHolder(vm)
     {
     }
 
-    // JSPropertyNameAccumulator only has a globalData.
-    APIEntryShim(JSGlobalData* globalData, bool registerThread = true)
-        : APIEntryShimWithoutLock(globalData, registerThread)
-        , m_lock(globalData->isSharedInstance() ? LockForReal : SilenceAssertionsOnly)
+    ~APIEntryShim()
     {
+        // Destroying our JSLockHolder should also destroy the VM.
+        m_vm.clear();
     }
 
 private:
-    JSLock m_lock;
+    JSLockHolder m_lockHolder;
 };
 
 class APICallbackShim {
 public:
     APICallbackShim(ExecState* exec)
         : m_dropAllLocks(exec)
-        , m_globalData(&exec->globalData())
+        , m_vm(&exec->vm())
     {
         wtfThreadData().resetCurrentIdentifierTable();
     }
 
     ~APICallbackShim()
     {
-        m_globalData->heap.activityCallback()->synchronize();
-        wtfThreadData().setCurrentIdentifierTable(m_globalData->identifierTable);
+        wtfThreadData().setCurrentIdentifierTable(m_vm->identifierTable);
     }
 
 private:
     JSLock::DropAllLocks m_dropAllLocks;
-    JSGlobalData* m_globalData;
+    VM* m_vm;
 };
 
 }