#ifndef CallLinkInfo_h
#define CallLinkInfo_h
+#include "ClosureCallStubRoutine.h"
#include "CodeLocation.h"
+#include "CodeSpecializationKind.h"
#include "JITWriteBarrier.h"
#include "JSFunction.h"
#include "Opcode.h"
CallLinkInfo()
: hasSeenShouldRepatch(false)
, isDFG(false)
+ , hasSeenClosure(false)
, callType(None)
{
}
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()
{
inline unsigned getCallLinkInfoBytecodeIndex(CallLinkInfo* callLinkInfo)
{
- return callLinkInfo->bytecodeIndex;
+ return callLinkInfo->codeOrigin.bytecodeIndex;
}
#endif // ENABLE(JIT)