Harden how the compiler references GC objects
[WebKit.git] / Source / JavaScriptCore / dfg / DFGAbstractValue.h
index 8a91014..03a5056 100644 (file)
@@ -38,7 +38,6 @@
 #include "ResultType.h"
 #include "SpeculatedType.h"
 #include "DumpContext.h"
-#include "StructureSet.h"
 
 namespace JSC {
 
@@ -120,7 +119,7 @@ struct AbstractValue {
         value.observeInvalidationPoint();
     }
     
-    void observeTransition(Structure* from, Structure* to)
+    void observeTransition(RegisteredStructure from, RegisteredStructure to)
     {
         if (m_type & SpecCell) {
             m_structure.observeTransition(from, to);
@@ -133,7 +132,7 @@ struct AbstractValue {
     
     class TransitionObserver {
     public:
-        TransitionObserver(Structure* from, Structure* to)
+        TransitionObserver(RegisteredStructure from, RegisteredStructure to)
             : m_from(from)
             , m_to(to)
         {
@@ -144,8 +143,8 @@ struct AbstractValue {
             value.observeTransition(m_from, m_to);
         }
     private:
-        Structure* m_from;
-        Structure* m_to;
+        RegisteredStructure m_from;
+        RegisteredStructure m_to;
     };
     
     class TransitionsObserver {
@@ -209,7 +208,8 @@ struct AbstractValue {
     
     void set(Graph&, const FrozenValue&, StructureClobberState);
     void set(Graph&, Structure*);
-    void set(Graph&, const StructureSet&);
+    void set(Graph&, RegisteredStructure);
+    void set(Graph&, const RegisteredStructureSet&);
     
     // Set this value to represent the given set of types as precisely as possible.
     void setType(Graph&, SpeculatedType);
@@ -301,7 +301,7 @@ struct AbstractValue {
     // SpecCell. Hence, after this call, the value will no longer have any non-cell members. But, you can
     // use admittedTypes to preserve some non-cell types. Note that it's wrong for admittedTypes to overlap
     // with SpecCell.
-    FiltrationResult filter(Graph&, const StructureSet&, SpeculatedType admittedTypes = SpecNone);
+    FiltrationResult filter(Graph&, const RegisteredStructureSet&, SpeculatedType admittedTypes = SpecNone);
     
     FiltrationResult filterArrayModes(ArrayModes);
     FiltrationResult filter(SpeculatedType);
@@ -311,9 +311,9 @@ struct AbstractValue {
 
     FiltrationResult filter(Graph&, const InferredType::Descriptor&);
     
-    FiltrationResult changeStructure(Graph&, const StructureSet&);
+    FiltrationResult changeStructure(Graph&, const RegisteredStructureSet&);
     
-    bool contains(Structure*) const;
+    bool contains(RegisteredStructure) const;
 
     bool validate(JSValue value) const
     {