]> git.saurik.com Git - apple/javascriptcore.git/blobdiff - heap/Local.h
JavaScriptCore-1218.34.tar.gz
[apple/javascriptcore.git] / heap / Local.h
index ac7d13696a1d261f51957a7627181bc972a3b956..d23435989c393759cedbb245f3ded632217c6e34 100644 (file)
@@ -27,7 +27,7 @@
 #define Local_h
 
 #include "Handle.h"
 #define Local_h
 
 #include "Handle.h"
-#include "JSGlobalData.h"
+#include "VM.h"
 
 /*
     A strongly referenced handle whose lifetime is temporary, limited to a given
 
 /*
     A strongly referenced handle whose lifetime is temporary, limited to a given
@@ -44,8 +44,8 @@ template <typename T> class Local : public Handle<T> {
 public:
     typedef typename Handle<T>::ExternalType ExternalType;
 
 public:
     typedef typename Handle<T>::ExternalType ExternalType;
 
-    Local(JSGlobalData&, ExternalType = ExternalType());
-    Local(JSGlobalData&, Handle<T>);
+    Local(VM&, ExternalType = ExternalType());
+    Local(VM&, Handle<T>);
     Local(const Local<T>&); // Adopting constructor. Used to return a Local to a calling function.
 
     Local& operator=(ExternalType);
     Local(const Local<T>&); // Adopting constructor. Used to return a Local to a calling function.
 
     Local& operator=(ExternalType);
@@ -56,14 +56,14 @@ private:
     void set(ExternalType);
 };
 
     void set(ExternalType);
 };
 
-template <typename T> inline Local<T>::Local(JSGlobalData& globalData, ExternalType value)
-    : Handle<T>(globalData.allocateLocalHandle())
+template <typename T> inline Local<T>::Local(VM& vm, ExternalType value)
+    : Handle<T>(vm.heap.handleStack()->push())
 {
     set(value);
 }
 
 {
     set(value);
 }
 
-template <typename T> inline Local<T>::Local(JSGlobalData& globalData, Handle<T> other)
-    : Handle<T>(globalData.allocateLocalHandle())
+template <typename T> inline Local<T>::Local(VM& vm, Handle<T> other)
+    : Handle<T>(vm.heap.handleStack()->push())
 {
     set(other.get());
 }
 {
     set(other.get());
 }
@@ -94,7 +94,6 @@ template <typename T> inline Local<T>& Local<T>::operator=(Handle<T> other)
 template <typename T> inline void Local<T>::set(ExternalType externalType)
 {
     ASSERT(slot());
 template <typename T> inline void Local<T>::set(ExternalType externalType)
 {
     ASSERT(slot());
-    ASSERT(!HandleTypes<T>::toJSValue(externalType) || !HandleTypes<T>::toJSValue(externalType).isCell() || Heap::isMarked(HandleTypes<T>::toJSValue(externalType).asCell()));
     *slot() = externalType;
 }
 
     *slot() = externalType;
 }
 
@@ -102,8 +101,8 @@ template <typename T> inline void Local<T>::set(ExternalType externalType)
 template <typename T, unsigned inlineCapacity = 0> class LocalStack {
     typedef typename Handle<T>::ExternalType ExternalType;
 public:
 template <typename T, unsigned inlineCapacity = 0> class LocalStack {
     typedef typename Handle<T>::ExternalType ExternalType;
 public:
-    LocalStack(JSGlobalData& globalData)
-        : m_globalData(&globalData)
+    LocalStack(VM& vm)
+        : m_vm(vm)
         , m_count(0)
     {
     }
         , m_count(0)
     {
     }
@@ -123,7 +122,7 @@ public:
     void push(ExternalType value)
     {
         if (m_count == m_stack.size())
     void push(ExternalType value)
     {
         if (m_count == m_stack.size())
-            m_stack.append(Local<T>(*m_globalData, value));
+            m_stack.append(Local<T>(m_vm, value));
         else
             m_stack[m_count] = value;
         m_count++;
         else
             m_stack[m_count] = value;
         m_count++;
@@ -133,7 +132,7 @@ public:
     unsigned size() const { return m_count; }
 
 private:
     unsigned size() const { return m_count; }
 
 private:
-    RefPtr<JSGlobalData> m_globalData;
+    VM& m_vm;
     Vector<Local<T>, inlineCapacity> m_stack;
     unsigned m_count;
 };
     Vector<Local<T>, inlineCapacity> m_stack;
     unsigned m_count;
 };