]> git.saurik.com Git - apple/javascriptcore.git/blobdiff - runtime/IntendedStructureChain.h
JavaScriptCore-7601.1.46.3.tar.gz
[apple/javascriptcore.git] / runtime / IntendedStructureChain.h
index a78188b98ac38c031849af025ba7f56aba8fc8c3..a0f5565bd11fee8c83711f0f56052f2143229e53 100644 (file)
@@ -26,6 +26,7 @@
 #ifndef IntendedStructureChain_h
 #define IntendedStructureChain_h
 
+#include "ConstantStructureCheck.h"
 #include "Structure.h"
 #include <wtf/RefCounted.h>
 
@@ -39,7 +40,8 @@ struct DumpContext;
 
 class IntendedStructureChain : public RefCounted<IntendedStructureChain> {
 public:
-    IntendedStructureChain(JSGlobalObject* globalObject, Structure* head);
+    IntendedStructureChain(JSGlobalObject* globalObject, JSValue prototype);
+    IntendedStructureChain(JSGlobalObject* globalObject, Structure*);
     IntendedStructureChain(CodeBlock* codeBlock, Structure* head, Structure* prototypeStructure);
     IntendedStructureChain(CodeBlock* codeBlock, Structure* head, StructureChain* chain);
     IntendedStructureChain(CodeBlock* codeBlock, Structure* head, StructureChain* chain, unsigned count);
@@ -47,27 +49,36 @@ public:
     
     bool isStillValid() const;
     bool matches(StructureChain*) const;
-    StructureChain* chain(VM&) const;
-    bool mayInterceptStoreTo(VM&, StringImpl* uid);
+    bool mayInterceptStoreTo(UniquedStringImpl* uid);
     bool isNormalized();
     
-    Structure* head() const { return m_head; }
+    bool takesSlowPathInDFGForImpureProperty();
+    
+    JSValue prototype() const { return m_prototype; }
     
     size_t size() const { return m_vector.size(); }
-    Structure* at(size_t index) { return m_vector[index]; }
-    Structure* operator[](size_t index) { return at(index); }
+    Structure* at(size_t index) const { return m_vector[index]; }
+    Structure* operator[](size_t index) const { return at(index); }
     
     JSObject* terminalPrototype() const;
     
     Structure* last() const { return m_vector.last(); }
     
+    bool operator==(const IntendedStructureChain&) const;
+    bool operator!=(const IntendedStructureChain& other) const
+    {
+        return !(*this == other);
+    }
+    
+    void gatherChecks(ConstantStructureCheckVector&) const;
+    
     void visitChildren(SlotVisitor&);
     void dump(PrintStream&) const;
     void dumpInContext(PrintStream&, DumpContext*) const;
     
 private:
     JSGlobalObject* m_globalObject;
-    Structure* m_head;
+    JSValue m_prototype;
     Vector<Structure*> m_vector;
 };