[pypy-svn] r66671 - pypy/branch/pyjitpl5/pypy/jit/metainterp/test
arigo at codespeak.net
arigo at codespeak.net
Wed Jul 29 18:10:06 CEST 2009
Author: arigo
Date: Wed Jul 29 18:10:05 2009
New Revision: 66671
Modified:
pypy/branch/pyjitpl5/pypy/jit/metainterp/test/test_virtualizable.py
Log:
Write the test. Still not implemented.
Modified: pypy/branch/pyjitpl5/pypy/jit/metainterp/test/test_virtualizable.py
==============================================================================
--- pypy/branch/pyjitpl5/pypy/jit/metainterp/test/test_virtualizable.py (original)
+++ pypy/branch/pyjitpl5/pypy/jit/metainterp/test/test_virtualizable.py Wed Jul 29 18:10:05 2009
@@ -637,10 +637,43 @@
res = self.meta_interp(f, [240], policy=StopAtXPolicy(g))
assert res == f(240)
- def test_external_access_sometimes(self):
+ def test_external_read_sometimes(self):
py.test.skip("known bug: access the frame in a residual call but"
" only sometimes, so that it's not seen during tracing")
+ jitdriver = JitDriver(greens = [], reds = ['frame'],
+ virtualizables = ['frame'])
+
+ class Frame(object):
+ _virtualizable2_ = ['x', 'y']
+ class SomewhereElse:
+ pass
+ somewhere_else = SomewhereElse()
+
+ def g():
+ somewhere_else.counter += 1
+ if somewhere_else.counter == 70:
+ result = somewhere_else.top_frame.y # external read
+ debug_print(lltype.Void, '-+-+-+-+- external read:', result)
+ assert result == 79
+ else:
+ result = 1
+ return result
+
+ def f(n):
+ frame = Frame()
+ frame.x = n
+ frame.y = 10
+ somewhere_else.counter = 0
+ somewhere_else.top_frame = frame
+ while frame.x > 0:
+ jitdriver.can_enter_jit(frame=frame)
+ jitdriver.jit_merge_point(frame=frame)
+ frame.x -= g()
+ frame.y += 1
+ return frame.x
+ res = self.meta_interp(f, [123], policy=StopAtXPolicy(g))
+ assert res == f(123)
def test_promote_index_in_virtualizable_list(self):
jitdriver = JitDriver(greens = [], reds = ['frame', 'n'],
More information about the Pypy-commit
mailing list