[pypy-svn] r36609 - in pypy/dist/pypy/jit: codegen codegen/llgraph timeshifter timeshifter/test

pedronis at codespeak.net pedronis at codespeak.net
Fri Jan 12 19:13:28 CET 2007


Author: pedronis
Date: Fri Jan 12 19:13:10 2007
New Revision: 36609

Modified:
   pypy/dist/pypy/jit/codegen/llgraph/llimpl.py
   pypy/dist/pypy/jit/codegen/model.py
   pypy/dist/pypy/jit/timeshifter/hrtyper.py
   pypy/dist/pypy/jit/timeshifter/rcontainer.py
   pypy/dist/pypy/jit/timeshifter/rtimeshift.py
   pypy/dist/pypy/jit/timeshifter/test/test_virtualizable.py
Log:
(arre, pedronis)

first test passing reading values out of jit frames for virtualizable accessed during residual calls.

Next step to generalize this to support lazy forcing of virtual struct "pointed to" from a virtualizable and accessed.



Modified: pypy/dist/pypy/jit/codegen/llgraph/llimpl.py
==============================================================================
--- pypy/dist/pypy/jit/codegen/llgraph/llimpl.py	(original)
+++ pypy/dist/pypy/jit/codegen/llgraph/llimpl.py	Fri Jan 12 19:13:10 2007
@@ -193,7 +193,11 @@
     elif T == llmemory.Address:
         return llmemory.cast_ptr_to_adr(c.value)
     else:
-        return lltype.cast_primitive(T, c.value)
+        if lltype.typeOf(c.value) == llmemory.Address:
+            value = llmemory.cast_adr_to_int(c.value)
+        else:
+            value = c.value
+        return lltype.cast_primitive(T, value)
 
 def isconst(gv_value):
     c = from_opaque_object(gv_value)

Modified: pypy/dist/pypy/jit/codegen/model.py
==============================================================================
--- pypy/dist/pypy/jit/codegen/model.py	(original)
+++ pypy/dist/pypy/jit/codegen/model.py	Fri Jan 12 19:13:10 2007
@@ -171,6 +171,15 @@
     def start_writing(self):
         '''Start a builder returned by jump_if_xxx(), or resumes a paused
         builder.'''
+
+
+    # read frame var support
+    
+    def get_frame_base(self):
+        pass
+
+    def get_frame_info(self):
+        pass
         
 class GenLabel(object):
     '''A "smart" label.  Represents an address of the start of a basic

Modified: pypy/dist/pypy/jit/timeshifter/hrtyper.py
==============================================================================
--- pypy/dist/pypy/jit/timeshifter/hrtyper.py	(original)
+++ pypy/dist/pypy/jit/timeshifter/hrtyper.py	Fri Jan 12 19:13:10 2007
@@ -680,8 +680,8 @@
         PTRTYPE = originalconcretetype(hop.args_s[0])
         if PTRTYPE.TO._hints.get('virtualizable', False):
             # xxx optimisation: do this folding already at hint-annotation time!
-            if hop.args_v[1].value == 'access':
-                ACCESSPTR = PTRTYPE.TO.access
+            if hop.args_v[1].value == 'vable_access':
+                ACCESSPTR = PTRTYPE.TO.vable_access
                 access_repr = self.getredrepr(ACCESSPTR)
                 return hop.inputconst(access_repr, lltype.nullptr(ACCESSPTR.TO))
 
@@ -690,7 +690,7 @@
                                               green_void_repr)
         v_argbox = hop.llops.as_ptrredbox(v_argbox)
         c_deepfrozen = inputconst(lltype.Bool, hop.args_s[0].deepfrozen)
-        structdesc = rcontainer.StructTypeDesc(self.RGenOp, PTRTYPE.TO)
+        structdesc = rcontainer.StructTypeDesc(self, PTRTYPE.TO)
         fielddesc = structdesc.getfielddesc(c_fieldname.value)
         if fielddesc is None:   # Void field
             return
@@ -710,7 +710,7 @@
         v_argbox, v_index = hop.inputargs(self.getredrepr(PTRTYPE),
                                           self.getredrepr(lltype.Signed))
         c_deepfrozen = inputconst(lltype.Bool, hop.args_s[0].deepfrozen)
-        fielddesc = rcontainer.ArrayFieldDesc(self.RGenOp, PTRTYPE.TO)
+        fielddesc = rcontainer.ArrayFieldDesc(self, PTRTYPE.TO)
         c_fielddesc = inputconst(lltype.Void, fielddesc)
         s_fielddesc = ts.rtyper.annotator.bookkeeper.immutablevalue(fielddesc)
         v_jitstate = hop.llops.getjitstate()
@@ -727,7 +727,7 @@
         ts = self
         [v_argbox] = hop.inputargs(self.getredrepr(PTRTYPE))
         
-        fielddesc = rcontainer.ArrayFieldDesc(self.RGenOp, PTRTYPE.TO)
+        fielddesc = rcontainer.ArrayFieldDesc(self, PTRTYPE.TO)
         c_fielddesc = inputconst(lltype.Void, fielddesc)
         s_fielddesc = ts.rtyper.annotator.bookkeeper.immutablevalue(fielddesc)
         v_jitstate = hop.llops.getjitstate()
@@ -768,7 +768,7 @@
                                                            self.getredrepr(VALUETYPE)
                                                            )
         v_destbox = hop.llops.as_ptrredbox(v_destbox)
-        structdesc = rcontainer.StructTypeDesc(self.RGenOp, PTRTYPE.TO)
+        structdesc = rcontainer.StructTypeDesc(self, PTRTYPE.TO)
         fielddesc = structdesc.getfielddesc(c_fieldname.value)
         assert fielddesc is not None   # skipped above
         c_fielddesc = inputconst(lltype.Void, fielddesc)
@@ -788,7 +788,7 @@
         v_argbox, v_index, v_valuebox= hop.inputargs(self.getredrepr(PTRTYPE),
                                                      self.getredrepr(lltype.Signed),
                                                      self.getredrepr(VALUETYPE))
-        fielddesc = rcontainer.ArrayFieldDesc(self.RGenOp, PTRTYPE.TO)
+        fielddesc = rcontainer.ArrayFieldDesc(self, PTRTYPE.TO)
         c_fielddesc = inputconst(lltype.Void, fielddesc)
         s_fielddesc = ts.rtyper.annotator.bookkeeper.immutablevalue(fielddesc)
         v_jitstate = hop.llops.getjitstate()
@@ -805,8 +805,7 @@
         v_argbox, c_fieldname = hop.inputargs(self.getredrepr(PTRTYPE),
                                               green_void_repr)
         v_argbox = hop.llops.as_ptrredbox(v_argbox)
-        fielddesc = rcontainer.NamedFieldDesc(self.RGenOp, PTRTYPE,
-                                              c_fieldname.value)
+        fielddesc = rcontainer.NamedFieldDesc(self, PTRTYPE, c_fieldname.value)
         c_fielddesc = inputconst(lltype.Void, fielddesc)
         s_fielddesc = ts.rtyper.annotator.bookkeeper.immutablevalue(fielddesc)
         v_jitstate = hop.llops.getjitstate()
@@ -820,7 +819,7 @@
         ts = self
         v_argbox, v_index = hop.inputargs(self.getredrepr(PTRTYPE),
                                           self.getredrepr(lltype.Signed))
-        fielddesc = rcontainer.ArrayFieldDesc(self.RGenOp, PTRTYPE.TO)
+        fielddesc = rcontainer.ArrayFieldDesc(self, PTRTYPE.TO)
         c_fielddesc = inputconst(lltype.Void, fielddesc)
         s_fielddesc = ts.rtyper.annotator.bookkeeper.immutablevalue(fielddesc)
         v_jitstate = hop.llops.getjitstate()
@@ -846,9 +845,9 @@
         PTRTYPE = originalconcretetype(hop.s_result)
         TYPE = PTRTYPE.TO
         if isinstance(TYPE, lltype.Struct):
-            contdesc = rcontainer.StructTypeDesc(self.RGenOp, TYPE)
+            contdesc = rcontainer.StructTypeDesc(self, TYPE)
         else:
-            contdesc = rcontainer.ArrayFieldDesc(self.RGenOp, TYPE)
+            contdesc = rcontainer.ArrayFieldDesc(self, TYPE)
         c_contdesc = inputconst(lltype.Void, contdesc)
         s_contdesc = ts.rtyper.annotator.bookkeeper.immutablevalue(contdesc)
         v_jitstate = hop.llops.getjitstate()
@@ -1506,8 +1505,10 @@
         if not T._hints.get('virtualizable', False):
             RedRepr.build_portal_arg_helpers(self)
             return
-        
-        names = unrolling_iterable([name for name in T._names if name != 'access'])
+
+
+        names = unrolling_iterable([name for name in T._names
+                                    if name not in rcontainer.VABLEFIELDS])
         def collect_residual_args(v): 
             t = (v,)
             for name in names:
@@ -1524,7 +1525,7 @@
         def make_arg_redbox(jitstate, inputargs_gv, i):
             box = typedesc.factory()
             jitstate.add_virtualizable(box)
-            j = 1
+            j = rcontainer.NVABLEFIELDS
             content = box.content
             assert isinstance(content, rcontainer.VirtualStruct)
             content_boxes = content.content_boxes
@@ -1537,13 +1538,13 @@
             content_boxes[j].genvar = gv_outside
             return box
         self.make_arg_redbox = make_arg_redbox
-        make_arg_redbox.consumes = len(T._names)
+        make_arg_redbox.consumes = len(T._names)-rcontainer.NVABLEFIELDS+1
 
     def gettypedesc(self):
         if self.typedesc is None:
-            ts = self.hrtyper
+            hrtyper = self.hrtyper
             T = self.original_concretetype.TO
-            self.typedesc = rcontainer.StructTypeDesc(ts.RGenOp, T)
+            self.typedesc = rcontainer.StructTypeDesc(hrtyper, T)
         return self.typedesc
 
     def create(self, hop):
@@ -1559,7 +1560,7 @@
         if T._hints.get('virtualizable', False):
             getredrepr = self.hrtyper.getredrepr
             for name in T._names:
-                if name == 'access':
+                if name in rcontainer.VABLEFIELDS:
                     continue
                 FIELDTYPE = getattr(T, name)
                 argtypes += getredrepr(FIELDTYPE).residual_argtypes()

Modified: pypy/dist/pypy/jit/timeshifter/rcontainer.py
==============================================================================
--- pypy/dist/pypy/jit/timeshifter/rcontainer.py	(original)
+++ pypy/dist/pypy/jit/timeshifter/rcontainer.py	Fri Jan 12 19:13:10 2007
@@ -5,6 +5,7 @@
 from pypy.jit.timeshifter import rvalue
 from pypy.rlib.unroll import unrolling_iterable
 
+from pypy.annotation import model as annmodel
 from pypy.rpython.lltypesystem import lloperation
 debug_print = lloperation.llop.debug_print
 debug_pdb = lloperation.llop.debug_pdb
@@ -37,15 +38,24 @@
 
 # ____________________________________________________________
 
+VABLEFIELDS = ('vable_base', 'vable_info', 'vable_access')
+NVABLEFIELDS = len(VABLEFIELDS)
+
 class StructTypeDesc(object):
     __metaclass__ = cachedtype
     firstsubstructdesc = None
     arrayfielddesc = None
     alloctoken = None
     varsizealloctoken = None
-    materialize = None        
+    materialize = None
+
+    base_desc = None
+    info_desc = None
+    access_desc = None
+    gv_access = None
     
-    def __init__(self, RGenOp, TYPE):
+    def __init__(self, hrtyper, TYPE):
+        RGenOp = hrtyper.RGenOp
         self.TYPE = TYPE
         self.PTRTYPE = lltype.Ptr(TYPE)
         self.ptrkind = RGenOp.kindToken(self.PTRTYPE)
@@ -58,10 +68,10 @@
             FIELDTYPE = getattr(self.TYPE, name)
             if isinstance(FIELDTYPE, lltype.ContainerType):
                 if isinstance(FIELDTYPE, lltype.Array):
-                    self.arrayfielddesc = ArrayFieldDesc(RGenOp, FIELDTYPE)
+                    self.arrayfielddesc = ArrayFieldDesc(hrtyper, FIELDTYPE)
                     self.varsizealloctoken = RGenOp.varsizeAllocToken(TYPE)
                     continue
-                substructdesc = StructTypeDesc(RGenOp, FIELDTYPE)
+                substructdesc = StructTypeDesc(hrtyper, FIELDTYPE)
                 assert name == self.TYPE._names[0], (
                     "unsupported: inlined substructures not as first field")
                 fielddescs.extend(substructdesc.fielddescs)
@@ -72,7 +82,7 @@
                 if FIELDTYPE is lltype.Void:
                     desc = None
                 else:
-                    desc = StructFieldDesc(RGenOp, self.PTRTYPE, name, index)
+                    desc = StructFieldDesc(hrtyper, self.PTRTYPE, name, index)
                     fielddescs.append(desc)
                 fielddesc_by_name[name] = desc
         self.fielddescs = fielddescs
@@ -85,10 +95,35 @@
         self.null = self.PTRTYPE._defl()
         self.gv_null = RGenOp.constPrebuiltGlobal(self.null)
 
-
         self.virtualizable = TYPE._hints.get('virtualizable', False)
         if self.virtualizable:
             self.VStructCls = VirtualizableStruct
+            self.base_desc = self.getfielddesc('vable_base')
+            self.info_desc = self.getfielddesc('vable_info')
+            self.access_desc = self.getfielddesc('vable_access')
+            ACCESS = TYPE.vable_access.TO
+            access = lltype.malloc(ACCESS, immortal=True)
+            self.gv_access = RGenOp.constPrebuiltGlobal(access)
+            annhelper = hrtyper.annhelper
+            j = 0
+            def make_get_field(T, j):
+                def get_field(struc):
+                    return RGenOp.read_frame_var(T, struc.vable_base,
+                                                 struc.vable_info,
+                                                 j)
+                return get_field
+            s_structtype = annmodel.lltype_to_annotation(self.PTRTYPE)
+            for i in range(NVABLEFIELDS, len(fielddescs)):
+                fielddesc = fielddescs[i]        
+                get_field = make_get_field(fielddesc.RESTYPE, j)
+                j += 1
+                s_lltype = annmodel.lltype_to_annotation(fielddesc.RESTYPE)
+                get_field_ptr = annhelper.delayedfunction(get_field,
+                                                          [s_structtype],
+                                                          s_lltype,
+                                                          needtype = True)
+                name = fielddesc.fieldname
+                setattr(access, 'get_'+name, get_field_ptr)
         else:
             self.VStructCls = VirtualStruct
             
@@ -136,8 +171,10 @@
     __metaclass__ = cachedtype
     allow_void = False
     virtualizable = False
+    gv_default = None
 
-    def __init__(self, RGenOp, PTRTYPE, RESTYPE):
+    def __init__(self, hrtyper, PTRTYPE, RESTYPE):
+        RGenOp = hrtyper.RGenOp
         self.PTRTYPE = PTRTYPE
         if isinstance(RESTYPE, lltype.ContainerType):
             RESTYPE = lltype.Ptr(RESTYPE)
@@ -148,11 +185,12 @@
         self.RESTYPE = RESTYPE
         self.ptrkind = RGenOp.kindToken(PTRTYPE)
         self.kind = RGenOp.kindToken(RESTYPE)
-        self.gv_default = RGenOp.constPrebuiltGlobal(self.RESTYPE._defl())
+        if self.RESTYPE is not lltype.Void:
+            self.gv_default = RGenOp.constPrebuiltGlobal(self.RESTYPE._defl())
         if RESTYPE is lltype.Void and self.allow_void:
             pass   # no redboxcls at all
         elif self.virtualizable:
-            self.structdesc = StructTypeDesc(RGenOp, T)
+            self.structdesc = StructTypeDesc(hrtyper, T)
         else:
             self.redboxcls = rvalue.ll_redboxcls(RESTYPE)
         self.immutable = PTRTYPE.TO._hints.get('immutable', False)
@@ -176,11 +214,11 @@
 
 class NamedFieldDesc(FieldDesc):
 
-    def __init__(self, RGenOp, PTRTYPE, name):
-        FieldDesc.__init__(self, RGenOp, PTRTYPE, getattr(PTRTYPE.TO, name))
+    def __init__(self, hrtyper, PTRTYPE, name):
+        FieldDesc.__init__(self, hrtyper, PTRTYPE, getattr(PTRTYPE.TO, name))
         T = self.PTRTYPE.TO
         self.fieldname = name
-        self.fieldtoken = RGenOp.fieldToken(T, name)
+        self.fieldtoken = hrtyper.RGenOp.fieldToken(T, name)
 
     def compact_repr(self): # goes in ll helper names
         return "Fld_%s_in_%s" % (self.fieldname, self.PTRTYPE._short_name())
@@ -201,16 +239,17 @@
 
 class StructFieldDesc(NamedFieldDesc):
 
-    def __init__(self, RGenOp, PTRTYPE, name, index):
-        NamedFieldDesc.__init__(self, RGenOp, PTRTYPE, name)
+    def __init__(self, hrtyper, PTRTYPE, name, index):
+        NamedFieldDesc.__init__(self, hrtyper, PTRTYPE, name)
         self.fieldindex = index
 
 class ArrayFieldDesc(FieldDesc):
     allow_void = True
 
-    def __init__(self, RGenOp, TYPE):
+    def __init__(self, hrtyper, TYPE):
         assert isinstance(TYPE, lltype.Array)
-        FieldDesc.__init__(self, RGenOp, lltype.Ptr(TYPE), TYPE.OF)
+        FieldDesc.__init__(self, hrtyper, lltype.Ptr(TYPE), TYPE.OF)
+        RGenOp = hrtyper.RGenOp
         self.arraytoken = RGenOp.arrayToken(TYPE)
         self.varsizealloctoken = RGenOp.varsizeAllocToken(TYPE)
         self.indexkind = RGenOp.kindToken(lltype.Signed)
@@ -371,7 +410,7 @@
         fielddescs = self.typedesc.fielddescs
         boxes = self.content_boxes
         gv_outside = boxes[-1].genvar
-        for i in range(1, len(fielddescs)):
+        for i in range(NVABLEFIELDS, len(fielddescs)):
             fielddesc = fielddescs[i]
             box = boxes[i]
             fielddesc.generate_set(jitstate, gv_outside,
@@ -381,11 +420,51 @@
         fielddescs = self.typedesc.fielddescs
         boxes = self.content_boxes
         boxes[-1].genvar = gv_outside
-        for i in range(1, len(fielddescs)):
+        for i in range(NVABLEFIELDS, len(fielddescs)):
             fielddesc = fielddescs[i]
             boxes[i] = fielddesc.generate_get(jitstate, gv_outside)
         jitstate.add_virtualizable(self.ownbox)
 
+    def prepare_for_residual_call(self, jitstate, gv_base):
+        typedesc = self.typedesc
+        builder = jitstate.curbuilder
+        gv_outside = self.content_boxes[-1].genvar
+        if gv_outside is not typedesc.gv_null:
+            base_desc = typedesc.base_desc
+            assert base_desc is not None
+            base_token = base_desc.fieldtoken
+            builder.genop_setfield(base_token, gv_outside, gv_base)
+            # xxx recursive and virtual stuff
+            boxes = self.content_boxes
+            vars_gv = []
+            n = len(boxes)
+            for i in range(NVABLEFIELDS, n-1):
+                box = boxes[i]
+                assert box.genvar
+                vars_gv.append(box.genvar)
+            gv_info = builder.get_frame_info(vars_gv)
+            info_token = typedesc.info_desc.fieldtoken
+            access_token = typedesc.access_desc.fieldtoken
+            builder.genop_setfield(info_token, gv_outside, gv_info)
+            builder.genop_setfield(access_token, gv_outside, typedesc.gv_access)
+
+    def after_residual_call(self, jitstate):
+        typedesc = self.typedesc
+        builder = jitstate.curbuilder
+        gv_outside = self.content_boxes[-1].genvar
+        if gv_outside is not typedesc.gv_null:
+            base_desc = typedesc.base_desc
+            assert base_desc is not None
+            base_token = typedesc.base_desc.fieldtoken
+            info_token = typedesc.info_desc.fieldtoken
+            access_token = typedesc.access_desc.fieldtoken
+            gv_base_null = typedesc.base_desc.gv_default
+            gv_info_null = typedesc.info_desc.gv_default
+            gv_access_null = typedesc.access_desc.gv_default
+            builder.genop_setfield(base_token, gv_outside, gv_base_null)
+            builder.genop_setfield(info_token, gv_outside, gv_info_null)
+            builder.genop_setfield(access_token, gv_outside, gv_access_null)
+                                   
 # ____________________________________________________________
 
 class FrozenPartialDataStruct(AbstractContainer):

Modified: pypy/dist/pypy/jit/timeshifter/rtimeshift.py
==============================================================================
--- pypy/dist/pypy/jit/timeshifter/rtimeshift.py	(original)
+++ pypy/dist/pypy/jit/timeshifter/rtimeshift.py	Fri Jan 12 19:13:10 2007
@@ -455,6 +455,7 @@
     def __init__(self, RGenOp, FUNCTYPE):
         self.sigtoken = RGenOp.sigToken(FUNCTYPE)
         self.result_kind = RGenOp.kindToken(FUNCTYPE.RESULT)
+        # xxx what if the result is virtualizable?
         self.redboxbuilder = rvalue.ll_redboxbuilder(FUNCTYPE.RESULT)
 
     def _freeze_(self):
@@ -462,10 +463,12 @@
 
 def ll_gen_residual_call(jitstate, calldesc, funcbox):
     builder = jitstate.curbuilder
+    jitstate.prepare_for_residual_call()
     gv_funcbox = funcbox.getgenvar(jitstate)
     argboxes = jitstate.frame.local_boxes
     args_gv = [argbox.getgenvar(jitstate) for argbox in argboxes]
     gv_result = builder.genop_call(calldesc.sigtoken, gv_funcbox, args_gv)
+    jitstate.after_residual_call()
     return calldesc.redboxbuilder(calldesc.result_kind, gv_result)
 
 
@@ -879,6 +882,25 @@
                 content.store_back(self)
         return incoming
 
+    def prepare_for_residual_call(self):
+        virtualizables = self.virtualizables
+        if virtualizables:
+            builder = self.curbuilder            
+            gv_base = builder.get_frame_base()
+            for virtualizable_box in virtualizables.keys():
+                content = virtualizable_box.content
+                assert isinstance(content, rcontainer.VirtualizableStruct)
+                content.prepare_for_residual_call(self, gv_base)
+                
+    def after_residual_call(self):
+        virtualizables = self.virtualizables
+        if virtualizables:
+            builder = self.curbuilder            
+            for virtualizable_box in virtualizables.keys():
+                content = virtualizable_box.content
+                assert isinstance(content, rcontainer.VirtualizableStruct)
+                content.after_residual_call(self)
+
     def freeze(self, memo):
         result = FrozenJITState()
         result.fz_frame = self.frame.freeze(memo)

Modified: pypy/dist/pypy/jit/timeshifter/test/test_virtualizable.py
==============================================================================
--- pypy/dist/pypy/jit/timeshifter/test/test_virtualizable.py	(original)
+++ pypy/dist/pypy/jit/timeshifter/test/test_virtualizable.py	Fri Jan 12 19:13:10 2007
@@ -1,6 +1,6 @@
 from pypy.jit.hintannotator.annotator import HintAnnotatorPolicy
 from pypy.jit.timeshifter.test.test_portal import PortalTest, P_NOVIRTUAL
-from pypy.rpython.lltypesystem import lltype
+from pypy.rpython.lltypesystem import lltype, llmemory
 
 import py
 
@@ -37,7 +37,9 @@
                           )
 
 XY.become(lltype.GcStruct('xy',
-                          ('access', lltype.Ptr(XY_ACCESS)),
+                          ('vable_base', llmemory.Address),
+                          ('vable_info', llmemory.GCREF),
+                          ('vable_access', lltype.Ptr(XY_ACCESS)),
                           ('x', lltype.Signed),
                           ('y', lltype.Signed),
                           hints = {'virtualizable': True}
@@ -47,7 +49,9 @@
                          ('w',  lltype.Signed))
 
 XP.become(lltype.GcStruct('xp',
-                          ('access', lltype.Ptr(XP_ACCESS)),
+                          ('vable_base', llmemory.Address),
+                          ('vable_info', llmemory.GCREF),                     
+                          ('vable_access', lltype.Ptr(XP_ACCESS)),
                           ('x', lltype.Signed),
                           ('p', PS),
                           hints = {'virtualizable': True}
@@ -59,12 +63,12 @@
     def test_simple_explicit(self):
    
         def f(xy):
-            xy_access = xy.access
+            xy_access = xy.vable_access
             if xy_access:
                 x = xy_access.get_x(xy)
             else:
                 x = xy.x
-            xy_access = xy.access
+            xy_access = xy.vable_access
             if xy_access:
                 y = xy_access.get_y(xy)
             else:
@@ -73,7 +77,7 @@
 
         def main(x, y):
             xy = lltype.malloc(XY)
-            xy.access = lltype.nullptr(XY_ACCESS)
+            xy.vable_access = lltype.nullptr(XY_ACCESS)
             xy.x = x
             xy.y = y
             return f(xy)
@@ -89,17 +93,17 @@
     def test_simple_explicit_set(self):
    
         def f(xy):
-            xy_access = xy.access
+            xy_access = xy.vable_access
             if xy_access:
                 x = xy_access.get_x(xy)
             else:
                 x = xy.x
-            xy_access = xy.access
+            xy_access = xy.vable_access
             if xy_access:
                 xy_access.set_y(xy, 1)
             else:
                 xy.y = 1
-            xy_access = xy.access
+            xy_access = xy.vable_access
             if xy_access:
                 y = xy_access.get_y(xy)
             else:
@@ -108,7 +112,7 @@
 
         def main(x, y):
             xy = lltype.malloc(XY)
-            xy.access = lltype.nullptr(XY_ACCESS)
+            xy.vable_access = lltype.nullptr(XY_ACCESS)
             xy.x = x
             xy.y = y
             return f(xy)
@@ -124,17 +128,17 @@
     def test_explicit_set_effect(self):
    
         def f(xy):
-            xy_access = xy.access
+            xy_access = xy.vable_access
             if xy_access:
                 x = xy_access.get_x(xy)
             else:
                 x = xy.x
-            xy_access = xy.access
+            xy_access = xy.vable_access
             if xy_access:
                 xy_access.set_y(xy, 3)
             else:
                 xy.y = 3
-            xy_access = xy.access
+            xy_access = xy.vable_access
             if xy_access:
                 y = xy_access.get_y(xy)
             else:
@@ -143,7 +147,7 @@
 
         def main(x, y):
             xy = lltype.malloc(XY)
-            xy.access = lltype.nullptr(XY_ACCESS)
+            xy.vable_access = lltype.nullptr(XY_ACCESS)
             xy.x = x
             xy.y = y
             v = f(xy)
@@ -160,7 +164,7 @@
     def test_simple_explicit_escape(self):
    
         def f(e, xy):
-            xy_access = xy.access
+            xy_access = xy.vable_access
             if xy_access:
                 xy_access.set_y(xy, 3)
             else:
@@ -170,7 +174,7 @@
 
         def main(x, y):
             xy = lltype.malloc(XY)
-            xy.access = lltype.nullptr(XY_ACCESS)
+            xy.vable_access = lltype.nullptr(XY_ACCESS)
             xy.x = x
             xy.y = y
             e = lltype.malloc(E)
@@ -187,12 +191,12 @@
 
     def test_simple_explicit_return_it(self):
         def f(which, xy1, xy2):
-            xy1_access = xy1.access
+            xy1_access = xy1.vable_access
             if xy1_access:
                 xy1_access.set_y(xy1, 3)
             else:
                 xy1.y = 3
-            xy2_access = xy2.access
+            xy2_access = xy2.vable_access
             if xy2_access:
                 xy2_access.set_y(xy2, 7)
             else:
@@ -204,9 +208,9 @@
 
         def main(which, x, y):
             xy1 = lltype.malloc(XY)
-            xy1.access = lltype.nullptr(XY_ACCESS)
+            xy1.vable_access = lltype.nullptr(XY_ACCESS)
             xy2 = lltype.malloc(XY)
-            xy2.access = lltype.nullptr(XY_ACCESS)
+            xy2.vable_access = lltype.nullptr(XY_ACCESS)
             xy1.x = x
             xy1.y = y
             xy2.x = y
@@ -224,15 +228,15 @@
    
         def f(x, y):
             xy = lltype.malloc(XY)
-            xy.access = lltype.nullptr(XY_ACCESS)
+            xy.vable_access = lltype.nullptr(XY_ACCESS)
             xy.x = x
             xy.y = y
-            xy_access = xy.access
+            xy_access = xy.vable_access
             if xy_access:
                 x = xy_access.get_x(xy)
             else:
                 x = xy.x
-            xy_access = xy.access
+            xy_access = xy.vable_access
             if xy_access:
                 y = xy_access.get_y(xy)
             else:
@@ -250,15 +254,15 @@
    
         def f(x, y):
             xy = lltype.malloc(XY)
-            xy.access = lltype.nullptr(XY_ACCESS)
+            xy.vable_access = lltype.nullptr(XY_ACCESS)
             xy.x = x
             xy.y = y
-            xy_access = xy.access
+            xy_access = xy.vable_access
             if xy_access:
                 x = xy_access.get_x(xy)
             else:
                 x = xy.x
-            xy_access = xy.access
+            xy_access = xy.vable_access
             if xy_access:
                 y = xy_access.get_y(xy)
             else:
@@ -276,12 +280,12 @@
     def test_simple_with_struct_explicit(self):
    
         def f(xp):
-            xp_access = xp.access
+            xp_access = xp.vable_access
             if xp_access:
                 x = xp_access.get_x(xp)
             else:
                 x = xp.x
-            xp_access = xp.access
+            xp_access = xp.vable_access
             if xp_access:
                 p = xp_access.get_p(xp)
             else:
@@ -290,7 +294,7 @@
 
         def main(x, a, b):
             xp = lltype.malloc(XP)
-            xp.access = lltype.nullptr(XP_ACCESS)
+            xp.vable_access = lltype.nullptr(XP_ACCESS)
             xp.x = x
             s = lltype.malloc(S)
             s.a = a
@@ -306,7 +310,7 @@
     def test_simple_with_setting_struct_explicit(self):
    
         def f(xp, s):
-            xp_access = xp.access
+            xp_access = xp.vable_access
             if xp_access:
                 xp_access.set_p(xp, s)
             else:
@@ -315,7 +319,7 @@
                 x = xp_access.get_x(xp)
             else:
                 x = xp.x
-            xp_access = xp.access
+            xp_access = xp.vable_access
             if xp_access:
                 p = xp_access.get_p(xp)
             else:
@@ -325,7 +329,7 @@
 
         def main(x, a, b):
             xp = lltype.malloc(XP)
-            xp.access = lltype.nullptr(XP_ACCESS)
+            xp.vable_access = lltype.nullptr(XP_ACCESS)
             xp.x = x
             s = lltype.malloc(S)
             s.a = a
@@ -344,12 +348,12 @@
             s = lltype.malloc(S)
             s.a = a
             s.b = b            
-            xp_access = xp.access
+            xp_access = xp.vable_access
             if xp_access:
                 xp_access.set_p(xp, s)
             else:
                 xp.p = s
-            xp_access = xp.access
+            xp_access = xp.vable_access
             if xp_access:
                 p = xp_access.get_p(xp)
             else:
@@ -363,7 +367,7 @@
 
         def main(x, a, b):
             xp = lltype.malloc(XP)
-            xp.access = lltype.nullptr(XP_ACCESS)
+            xp.vable_access = lltype.nullptr(XP_ACCESS)
             xp.x = x
             v = f(xp, a, b)
             return v+xp.p.b
@@ -378,17 +382,17 @@
    
         def f(x, a, b):
             xp = lltype.malloc(XP)
-            xp.access = lltype.nullptr(XP_ACCESS)
+            xp.vable_access = lltype.nullptr(XP_ACCESS)
             xp.x = x
             s = lltype.malloc(S)
             s.a = a
             s.b = b            
-            xp_access = xp.access
+            xp_access = xp.vable_access
             if xp_access:
                 xp_access.set_p(xp, s)
             else:
                 xp.p = s
-            xp_access = xp.access
+            xp_access = xp.vable_access
             if xp_access:
                 p = xp_access.get_p(xp)
             else:
@@ -413,7 +417,7 @@
    
         def f(e):
             xy = e.xy
-            xy_access = xy.access
+            xy_access = xy.vable_access
             if xy_access:
                 xy_access.set_y(xy, 3)
             else:
@@ -422,7 +426,7 @@
 
         def main(x, y):
             xy = lltype.malloc(XY)
-            xy.access = lltype.nullptr(XY_ACCESS)
+            xy.vable_access = lltype.nullptr(XY_ACCESS)
             xy.x = x
             xy.y = y
             e = lltype.malloc(E)
@@ -438,17 +442,17 @@
    
         def f(x, y):
             xy = lltype.malloc(XY)
-            xy.access = lltype.nullptr(XY_ACCESS)
+            xy.vable_access = lltype.nullptr(XY_ACCESS)
             xy.x = x
             xy.y = y
             e = lltype.malloc(E)
             e.xy = xy
-            xy_access = xy.access
+            xy_access = xy.vable_access
             if xy_access:
                 y = xy_access.get_y(xy)
             else:
                 y = xy.y
-            xy_access = xy.access
+            xy_access = xy.vable_access
             newy = 2*y
             if xy_access:
                 xy_access.set_y(xy, newy)
@@ -467,7 +471,7 @@
     def test_explicit_late_residual_red_call(self):
         def g(e):
             xy = e.xy
-            xy_access = xy.access
+            xy_access = xy.vable_access
             if xy_access:
                 y = xy_access.get_y(xy)
             else:
@@ -476,12 +480,12 @@
 
         def f(e):
             xy = e.xy
-            xy_access = xy.access
+            xy_access = xy.vable_access
             if xy_access:
                 y = xy_access.get_y(xy)
             else:
                 y = xy.y
-            xy_access = xy.access
+            xy_access = xy.vable_access
             newy = 2*y
             if xy_access:
                 xy_access.set_y(xy, newy)
@@ -492,7 +496,7 @@
             
         def main(x, y):
             xy = lltype.malloc(XY)
-            xy.access = lltype.nullptr(XY_ACCESS)
+            xy.vable_access = lltype.nullptr(XY_ACCESS)
             xy.x = x
             xy.y = y
             e = lltype.malloc(E)
@@ -514,11 +518,11 @@
         assert res == 42
 
     def test_explicit_residual_red_call(self):
-        py.test.skip("WIP")
+        #py.test.skip("WIP")
         
         def g(e):
             xy = e.xy
-            xy_access = xy.access
+            xy_access = xy.vable_access
             if xy_access:
                 y = xy_access.get_y(xy)
             else:
@@ -527,12 +531,12 @@
 
         def f(e):
             xy = e.xy
-            xy_access = xy.access
+            xy_access = xy.vable_access
             if xy_access:
                 y = xy_access.get_y(xy)
             else:
                 y = xy.y
-            xy_access = xy.access
+            xy_access = xy.vable_access
             newy = 2*y
             if xy_access:
                 xy_access.set_y(xy, newy)
@@ -543,7 +547,7 @@
             
         def main(x, y):
             xy = lltype.malloc(XY)
-            xy.access = lltype.nullptr(XY_ACCESS)
+            xy.vable_access = lltype.nullptr(XY_ACCESS)
             xy.x = x
             xy.y = y
             e = lltype.malloc(E)



More information about the Pypy-commit mailing list