[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