+void CallLinkInfo::visitWeak(RepatchBuffer& repatchBuffer)
+{
+ if (isLinked()) {
+ if (stub) {
+ if (!Heap::isMarked(stub->structure())
+ || !Heap::isMarked(stub->executable())) {
+ if (Options::verboseOSR()) {
+ dataLog(
+ "Clearing closure call from ", *repatchBuffer.codeBlock(), " to ",
+ stub->executable()->hashFor(specializationKind()),
+ ", stub routine ", RawPointer(stub.get()), ".\n");
+ }
+ unlink(repatchBuffer);
+ }
+ } else if (!Heap::isMarked(callee.get())) {
+ if (Options::verboseOSR()) {
+ dataLog(
+ "Clearing call from ", *repatchBuffer.codeBlock(), " to ",
+ RawPointer(callee.get()), " (",
+ callee.get()->executable()->hashFor(specializationKind()),
+ ").\n");
+ }
+ unlink(repatchBuffer);
+ }
+ }
+ if (!!lastSeenCallee && !Heap::isMarked(lastSeenCallee.get()))
+ lastSeenCallee.clear();
+}
+
+CallLinkInfo& CallLinkInfo::dummy()
+{
+ static NeverDestroyed<CallLinkInfo> dummy;
+ return dummy;
+}
+