]> git.saurik.com Git - apple/javascriptcore.git/blobdiff - bytecode/CallLinkInfo.h
JavaScriptCore-1218.0.1.tar.gz
[apple/javascriptcore.git] / bytecode / CallLinkInfo.h
index 44d50a9717090ad92523cea465c49e246e4fc343..36eb84bee3437a37cab6f341c876b0a7300ebfd4 100644 (file)
@@ -26,7 +26,9 @@
 #ifndef CallLinkInfo_h
 #define CallLinkInfo_h
 
+#include "ClosureCallStubRoutine.h"
 #include "CodeLocation.h"
+#include "CodeSpecializationKind.h"
 #include "JITWriteBarrier.h"
 #include "JSFunction.h"
 #include "Opcode.h"
@@ -55,6 +57,7 @@ struct CallLinkInfo : public BasicRawSentinelNode<CallLinkInfo> {
     CallLinkInfo()
         : hasSeenShouldRepatch(false)
         , isDFG(false)
+        , hasSeenClosure(false)
         , callType(None)
     {
     }
@@ -64,19 +67,27 @@ struct CallLinkInfo : public BasicRawSentinelNode<CallLinkInfo> {
         if (isOnList())
             remove();
     }
+    
+    CodeSpecializationKind specializationKind() const
+    {
+        return specializationFromIsConstruct(callType == Construct);
+    }
 
-    CodeLocationLabel callReturnLocation; // it's a near call in the old JIT, or a normal call in DFG
+    CodeLocationNearCall callReturnLocation;
     CodeLocationDataLabelPtr hotPathBegin;
     CodeLocationNearCall hotPathOther;
     JITWriteBarrier<JSFunction> callee;
     WriteBarrier<JSFunction> lastSeenCallee;
+    RefPtr<ClosureCallStubRoutine> stub;
     bool hasSeenShouldRepatch : 1;
     bool isDFG : 1;
-    CallType callType : 6;
-    unsigned bytecodeIndex;
+    bool hasSeenClosure : 1;
+    CallType callType : 5;
+    unsigned calleeGPR : 8;
+    CodeOrigin codeOrigin;
 
-    bool isLinked() { return callee; }
-    void unlink(JSGlobalData&, RepatchBuffer&);
+    bool isLinked() { return stub || callee; }
+    void unlink(VM&, RepatchBuffer&);
 
     bool seenOnce()
     {
@@ -96,7 +107,7 @@ inline void* getCallLinkInfoReturnLocation(CallLinkInfo* callLinkInfo)
 
 inline unsigned getCallLinkInfoBytecodeIndex(CallLinkInfo* callLinkInfo)
 {
-    return callLinkInfo->bytecodeIndex;
+    return callLinkInfo->codeOrigin.bytecodeIndex;
 }
 #endif // ENABLE(JIT)