[pypy-svn] r62483 - in pypy/branch/pyjitpl5/pypy/jit/metainterp: . test
fijal at codespeak.net
fijal at codespeak.net
Tue Mar 3 17:35:23 CET 2009
Author: fijal
Date: Tue Mar 3 17:35:21 2009
New Revision: 62483
Modified:
pypy/branch/pyjitpl5/pypy/jit/metainterp/codewriter.py
pypy/branch/pyjitpl5/pypy/jit/metainterp/test/test_vable_optimize.py
pypy/branch/pyjitpl5/pypy/jit/metainterp/test/test_virtualizable.py
pypy/branch/pyjitpl5/pypy/jit/metainterp/virtualizable.py
Log:
pass around original struct type for offsets. Also a test for virtualizable
inheritance
Modified: pypy/branch/pyjitpl5/pypy/jit/metainterp/codewriter.py
==============================================================================
--- pypy/branch/pyjitpl5/pypy/jit/metainterp/codewriter.py (original)
+++ pypy/branch/pyjitpl5/pypy/jit/metainterp/codewriter.py Tue Mar 3 17:35:21 2009
@@ -826,7 +826,7 @@
except KeyError:
from pypy.jit.metainterp import virtualizable
virtualizabledesc = virtualizable.VirtualizableDesc(
- self.cpu, TOPSTRUCT)
+ self.cpu, TOPSTRUCT, STRUCTTYPE)
virtualizabledesc.hash = len(metainterp._virtualizabledescs)
metainterp._virtualizabledescs[TOPSTRUCT] = virtualizabledesc
metainterp._can_have_virtualizables = virtualizabledesc
Modified: pypy/branch/pyjitpl5/pypy/jit/metainterp/test/test_vable_optimize.py
==============================================================================
--- pypy/branch/pyjitpl5/pypy/jit/metainterp/test/test_vable_optimize.py (original)
+++ pypy/branch/pyjitpl5/pypy/jit/metainterp/test/test_vable_optimize.py Tue Mar 3 17:35:21 2009
@@ -60,7 +60,7 @@
# ____________________________________________________________
-xy_desc = VirtualizableDesc(cpu, XY)
+xy_desc = VirtualizableDesc(cpu, XY, XY)
# ____________________________________________________________
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 Tue Mar 3 17:35:21 2009
@@ -270,6 +270,38 @@
res = self.meta_interp(f, [20])
assert res == f(20)
+ def test_virtualizable_hierarchy(self):
+ jitdriver = JitDriver(greens = [], reds = ['frame', 'n'])
+
+ class BaseFrame(object):
+ _virtualizable2_ = True
+
+ _always_virtual_ = ['x']
+
+ def __init__(self, x):
+ self.x = x
+
+ class Frame(BaseFrame):
+ pass
+
+ class Stuff(object):
+ def __init__(self, x):
+ self.x = x
+
+ def f(n):
+ frame = Frame(Stuff(3))
+
+ while n > 0:
+ jitdriver.can_enter_jit(frame=frame, n=n)
+ jitdriver.jit_merge_point(n=n, frame=frame)
+ frame.x = Stuff(frame.x.x + 1)
+ n -= 1
+ return frame.x.x
+
+ res = self.meta_interp(f, [20])
+ assert res == f(20)
+ self.check_loops(getfield_gc=0, setfield_gc=0)
+
def test_external_read(self):
py.test.skip("Fails")
class Frame(object):
Modified: pypy/branch/pyjitpl5/pypy/jit/metainterp/virtualizable.py
==============================================================================
--- pypy/branch/pyjitpl5/pypy/jit/metainterp/virtualizable.py (original)
+++ pypy/branch/pyjitpl5/pypy/jit/metainterp/virtualizable.py Tue Mar 3 17:35:21 2009
@@ -5,22 +5,12 @@
from pypy.annotation.model import lltype_to_annotation
from pypy.rlib.objectmodel import we_are_translated
-def get_field(cpu, STRUCT, fieldname):
- s = STRUCT
- while True:
- if fieldname in s._flds:
- return cpu.fielddescrof(s, fieldname)
- if 'super' in s._flds:
- s = s.super
- else:
- raise AttributeError("%r has no attribute %s" % (STRUCT, fieldname))
-
class VirtualizableDesc(history.AbstractValue):
hash = 0
- def __init__(self, cpu, TOPSTRUCT):
+ def __init__(self, cpu, TOPSTRUCT, STRUCTTYPE):
"NOT_RPYTHON"
- self.virtuals = [get_field(cpu, TOPSTRUCT, 'inst_' + name) for
+ self.virtuals = [cpu.fielddescrof(STRUCTTYPE, 'inst_' + name) for
name in TOPSTRUCT._hints['virtuals']]
initialize_virtualizable(cpu, TOPSTRUCT.access)
self.vable_base = cpu.fielddescrof(TOPSTRUCT, 'vable_base')
More information about the Pypy-commit
mailing list