def handle_async_forcing(self, force_token): from pypy.jit.metainterp.pyjitpl import MetaInterp from pypy.jit.metainterp.resume import force_from_resumedata # To handle the forcing itself, we create a temporary MetaInterp # as a convenience to move the various data to its proper place. metainterp_sd = self.metainterp_sd metainterp = MetaInterp(metainterp_sd) metainterp.history = None # blackholing liveboxes = metainterp_sd.cpu.make_boxes_from_latest_values(self) # expect_virtualizable = metainterp_sd.virtualizable_info is not None forced_data = force_from_resumedata(metainterp, liveboxes, self, expect_virtualizable) virtualizable_boxes, virtualref_boxes, all_virtuals = forced_data # # Handle virtualref_boxes: mark each JIT_VIRTUAL_REF as forced vrefinfo = metainterp_sd.virtualref_info for i in range(0, len(virtualref_boxes), 2): virtualbox = virtualref_boxes[i] vrefbox = virtualref_boxes[i+1] vrefinfo.forced_single_vref(vrefbox.getref_base(), virtualbox.getref_base()) # Handle virtualizable_boxes: store them on the real virtualizable now if expect_virtualizable: metainterp_sd.virtualizable_info.forced_vable(virtualizable_boxes) # Handle all_virtuals: keep them for later blackholing from the # future failure of the GUARD_NOT_FORCED self.save_data(force_token, all_virtuals)
def handle_async_forcing(self, force_token): from pypy.jit.metainterp.resume import force_from_resumedata metainterp_sd = self.metainterp_sd vinfo = self.jitdriver_sd.virtualizable_info ginfo = self.jitdriver_sd.greenfield_info all_virtuals = force_from_resumedata(metainterp_sd, self, vinfo, ginfo) # The virtualizable data was stored on the real virtualizable above. # Handle all_virtuals: keep them for later blackholing from the # future failure of the GUARD_NOT_FORCED self.save_data(force_token, all_virtuals)