[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