def test_direct_invalid(): x1 = X() vref = virtual_ref(x1) assert vref._state == "non-forced" virtual_ref_finish(vref, x1) assert vref._state == "invalid" py.test.raises(InvalidVirtualRef, "vref()")
def f(): vref = virtual_ref(X()) try: vref() return 42 except InvalidVirtualRef: return -1
def f(n): while n > 0: myjitdriver.can_enter_jit(n=n) myjitdriver.jit_merge_point(n=n) xy = XY() xy.next1 = lltype.malloc(A, 0) xy.next2 = lltype.malloc(A, 0) xy.next3 = lltype.malloc(A, 0) xy.next4 = lltype.malloc(A, 0) xy.next5 = lltype.malloc(A, 0) xy.n = n exctx.topframeref = vref = virtual_ref(xy) if n % 6 == 0: xy.next1 = lltype.nullptr(A) xy.next2 = lltype.nullptr(A) xy.next3 = lltype.nullptr(A) externalfn(n) n -= 1 exctx.topframeref = vref_None xy.next1 = lltype.nullptr(A) xy.next2 = lltype.nullptr(A) xy.next3 = lltype.nullptr(A) xy.next4 = lltype.nullptr(A) xy.next5 = lltype.nullptr(A) virtual_ref_finish(vref, xy) return exctx.m
def enter_virtual_frame(self, s_sender): self.set_state(ActiveContext) if self.has_s_sender() or s_sender is None: return jit.vref_None else: self._s_sender = jit.virtual_ref(s_sender) return self._s_sender
def enter(self, frame): frame.backref = self.topframeref if self.last_instr != -1: frame.back_last_instr = self.last_instr self.topframeref = jit.virtual_ref(frame) if isinstance(frame, Frame): self.regexp_match_cell = frame.regexp_match_cell
def test_direct_invalid(): x1 = X() vref = virtual_ref(x1) assert vref._state == 'non-forced' virtual_ref_finish(vref, x1) assert vref._state == 'invalid' py.test.raises(InvalidVirtualRef, "vref()")
def main(n): f = Frame() f.x = 1 f_ref = virtual_ref(f) i = 0 while i < n: jitdriver.jit_merge_point(f=f, i=i, f_ref=f_ref, n=n) i += f_ref().x return i
def f(n): res1 = -42 while n > 0: myjitdriver.jit_merge_point(n=n, res1=res1) x = X() vref = virtual_ref(x) res1 = residual(vref) virtual_ref_finish(vref, x) n -= 1 return res1
def f(n): ec = ExecutionContext() while n > 0: myjitdriver.jit_merge_point(n=n, ec=ec) frame = Frame(1) ec.topframeref = virtual_ref(frame) n -= ec.topframeref().x frame_vref = ec.topframeref ec.topframeref = vref_None virtual_ref_finish(frame_vref, frame) return n
def test_direct_forced(): x1 = X() vref = virtual_ref(x1) assert vref._state == 'non-forced' assert vref.virtual is True assert vref() is x1 assert vref._state == 'forced' assert vref.virtual is False virtual_ref_finish(vref, x1) assert vref._state == 'forced' assert vref.virtual is False assert vref() is x1
def fn(n): res = False while n > 0: myjitdriver.can_enter_jit(n=n) myjitdriver.jit_merge_point(n=n) xy = XY() xy.n = n vref = virtual_ref(xy) virtual_ref_finish(vref, xy) vref() # raises InvalidVirtualRef when jitted n -= 1 return res
def test_direct_forced(): x1 = X() vref = virtual_ref(x1) assert vref._state == "non-forced" assert vref.virtual is True assert vref() is x1 assert vref._state == "forced" assert vref.virtual is False virtual_ref_finish(vref, x1) assert vref._state == "forced" assert vref.virtual is False assert vref() is x1
def f(n): while n > 0: myjitdriver.can_enter_jit(n=n) myjitdriver.jit_merge_point(n=n) xy = XY() xy.n = n exctx.topframeref = vref = virtual_ref(xy) escapes.append(xy) xy.next1 = lltype.malloc(A, 0) n = exctx.topframeref().n - 1 exctx.topframeref = vref_None virtual_ref_finish(vref, xy) return 1
def fn(n): res = 0 while n > 0: myjitdriver.can_enter_jit(n=n, res=res) myjitdriver.jit_merge_point(n=n, res=res) xy = XY() xy.n = n vref = virtual_ref(xy) force_it(vref, n) virtual_ref_finish(vref, xy) res += force_it(vref, n) # doesn't raise, because it was already forced n -= 1 return res
def fn(n): res = 0 while n > 0: myjitdriver.can_enter_jit(n=n, res=res) myjitdriver.jit_merge_point(n=n, res=res) xy = XY() xy.n = n vref = virtual_ref(xy) force_it(vref, n) virtual_ref_finish(vref, xy) res += force_it( vref, n) # doesn't raise, because it was already forced n -= 1 return res
def f(frame, n, reclevel): while n > 0: myjitdriver.can_enter_jit(n=n, frame=frame, rec=reclevel) myjitdriver.jit_merge_point(n=n, frame=frame, rec=reclevel) if reclevel == 0: return n xy = XY() exctx.topframeref = vref = virtual_ref(xy) m = f(xy, n, reclevel - 1) assert m == n n -= 1 exctx.topframeref = vref_None virtual_ref_finish(vref, xy) return 2
def f(frame, n, reclevel): while n > 0: myjitdriver.can_enter_jit(n=n, frame=frame, rec=reclevel) myjitdriver.jit_merge_point(n=n, frame=frame, rec=reclevel) if reclevel == 0: return n xy = XY() exctx.topframeref = vref = virtual_ref(xy) m = f(xy, n, reclevel-1) assert m == n n -= 1 exctx.topframeref = vref_None virtual_ref_finish(vref, xy) return 2
def f(n): while n > 0: myjitdriver.jit_merge_point(n=n) xy = XY() xy.n = n vr = virtual_ref(xy) # force the virtualref to be allocated exctx.vr = vr # force xy to be allocated escapexy(xy) # clean up exctx.vr = vref_None virtual_ref_finish(vr, xy) n -= 1 return 1
def f(n): while n > 0: jitdriver.can_enter_jit(n=n) jitdriver.jit_merge_point(n=n) x = X() x.n = n exctx.topframeref = vref = virtual_ref(x) # here, 'x' should be virtual exctx.topframeref = vref_None virtual_ref_finish(vref, x) # 'x' and 'vref' can randomly escape after the call to # finish(). g(vref) n -= 1 return 1
def f(frame, n, reclevel): while n > 0: myjitdriver.can_enter_jit(n=n, frame=frame, rec=reclevel) myjitdriver.jit_merge_point(n=n, frame=frame, rec=reclevel) frame.n += 1 xy = XY() xy.n = n exctx.topframeref = vref = virtual_ref(xy) if reclevel > 0: m = f(xy, frame.n, reclevel-1) assert xy.n == m n -= 1 else: n -= 2 exctx.topframeref = vref_None virtual_ref_finish(vref, xy) return frame.n
def f(frame, n, reclevel): while n > 0: myjitdriver.can_enter_jit(n=n, frame=frame, rec=reclevel) myjitdriver.jit_merge_point(n=n, frame=frame, rec=reclevel) frame.n += 1 xy = XY() xy.n = n exctx.topframeref = vref = virtual_ref(xy) if reclevel > 0: m = f(xy, frame.n, reclevel - 1) assert xy.n == m n -= 1 else: n -= 2 exctx.topframeref = vref_None virtual_ref_finish(vref, xy) return frame.n
def f(): n = 0 while n < 100: myjitdriver.jit_merge_point(n=n) xy = XY() xy.n = n exctx.topframeref = vref = jit.virtual_ref(xy) res = do_call(n) # this is equivalent of a cffi call which # sometimes forces a frame # when n==50, fn() will force the frame, so guard_not_forced # fails and we enter blackholing: this test makes sure that # the result of call_release_gil is kept alive before the # raw_store, and that the corresponding box is passed # in the fail_args. Before the fix, the result of # call_release_gil was simply lost and when guard_not_forced # failed, and the value of "res" was unpredictable. # See commit b84ff38f34bd and subsequents. assert res == n * 2 jit.virtual_ref_finish(vref, xy) exctx.topframeref = jit.vref_None n += 1 return n
def f(): n = 0 while n < 100: myjitdriver.jit_merge_point(n=n) xy = XY() xy.n = n exctx.topframeref = vref = jit.virtual_ref(xy) res = do_call(n) # this is equivalent of a cffi call which # sometimes forces a frame # when n==50, fn() will force the frame, so guard_not_forced # fails and we enter blackholing: this test makes sure that # the result of call_release_gil is kept alive before the # raw_store, and that the corresponding box is passed # in the fail_args. Before the fix, the result of # call_release_gil was simply lost and when guard_not_forced # failed, and the value of "res" was unpredictable. # See commit b84ff38f34bd and subsequents. assert res == n*2 jit.virtual_ref_finish(vref, xy) exctx.topframeref = jit.vref_None n += 1 return n
def f(n): while n > 0: myjitdriver.can_enter_jit(n=n) myjitdriver.jit_merge_point(n=n) xy = XY() xy.next1 = lltype.malloc(A, 0) xy.next2 = lltype.malloc(A, 0) xy.next3 = lltype.malloc(A, 0) buf = lltype.malloc(rffi.CCHARP.TO, 1, flavor='raw') buf[0] = chr(n) # this is a raw virtual xy.next4 = lltype.malloc(rffi.CCHARP.TO, 1, flavor='raw') xy.n = n exctx.topframeref = vref = virtual_ref(xy) n -= externalfn(n) xy.next1 = lltype.nullptr(A) xy.next2 = lltype.nullptr(A) xy.next3 = lltype.nullptr(A) lltype.free(xy.next4, flavor='raw') xy.next4 = lltype.nullptr(rffi.CCHARP.TO) virtual_ref_finish(vref, xy) exctx.topframeref = vref_None lltype.free(buf, flavor='raw') return exctx.m
def f(): x = X() exctx.topframeref = vref = virtual_ref(x) exctx.topframeref = vref_None virtual_ref_finish(vref, x) return 1
def enter(self, frame): if self.space.reverse_debugging: self._revdb_enter(frame) frame.f_backref = self.topframeref self.topframeref = jit.virtual_ref(frame)
def f(n): if n > 0: return virtual_ref(Y()) else: return non_virtual_ref(Z())
def fn(): x = X() vref = virtual_ref(x) x1 = vref() # jit_force_virtual virtual_ref_finish(vref, x)
def f(): return jit.virtual_ref(X())
def f(): vref = jit.virtual_ref(X()) return vref()
def f(n, x, x0, x1, x2, x3, x4, x5, x6, x7, l, s): a = A() glob.v = vref = virtual_ref(a) virtual_ref_finish(vref, a) n -= 1 return n, x, x0, x1, x2, x3, x4, x5, x6, x7, l, s
def f(): x1 = X() vref = virtual_ref(x1) x2 = vref() virtual_ref_finish(vref, x1) return x2
def f(): return virtual_ref(X())
def enter(self, frame): frame.backref = self.topframeref if self.last_instr != -1: frame.back_last_instr = self.last_instr self.topframeref = jit.virtual_ref(frame)
def f(n): if n > 0: return virtual_ref(X()) else: return vref_None
def enter(n): x = X(n + 10) exctx._frame = x exctx.topframeref = virtual_ref(x)
def enter(self, frame): frame.f_backref = self.topframeref self.topframeref = jit.virtual_ref(frame)
def f(): vref = virtual_ref(X()) return vref.virtual