[pypy-svn] r32124 - pypy/branch/more-gckinds/pypy/rpython
mwh at codespeak.net
mwh at codespeak.net
Sun Sep 10 16:44:47 CEST 2006
Author: mwh
Date: Sun Sep 10 16:44:46 2006
New Revision: 32124
Modified:
pypy/branch/more-gckinds/pypy/rpython/rptr.py
Log:
more baby steps
Modified: pypy/branch/more-gckinds/pypy/rpython/rptr.py
==============================================================================
--- pypy/branch/more-gckinds/pypy/rpython/rptr.py (original)
+++ pypy/branch/more-gckinds/pypy/rpython/rptr.py Sun Sep 10 16:44:46 2006
@@ -226,6 +226,10 @@
return hop.genop('setinteriorfield', vlist,
resulttype=hop.r_result.lowleveltype)
+## class __extend__(FieldOnlyInteriorPtrRepr, IntegerRepr):
+## def rtype_getitem((r_ptr, r_item), hop):
+## pass
+
class InteriorPtrRepr(Repr):
def __init__(self, ptrtype):
assert isinstance(ptrtype, InteriorPtr)
@@ -240,21 +244,25 @@
self.resulttype = Ptr(ptrtype.TO)
assert not isinstance(self.resulttype, ContainerType)
+ def getinteriorfieldargs(self, hop, v_interior_ptr):
+ vlist = []
+ INTERIOR_TYPE = v_interior_ptr.concretetype.TO
+ for name in INTERIOR_TYPE._names:
+ vlist.append(
+ hop.genop('getfield',
+ [v_interior_ptr, flowmodel.Constant(name, Void)],
+ resulttype=INTERIOR_TYPE._flds[name]))
+ return vlist
+
def rtype_getattr(self, hop):
v_interior_ptr, v_fieldname = hop.inputargs(self, Void)
- v_ptr = hop.genop('getfield', [v_interior_ptr, flowmodel.Constant('ptr', Void)],
- resulttype=self.parentptrtype)
- v_offset = hop.genop('getfield', [v_interior_ptr, flowmodel.Constant('index', Void)],
- resulttype=Signed)
- return hop.genop('getinteriorfield', [v_ptr, v_offset, v_fieldname],
+ vlist = self.getinteriorfieldargs(hop, v_interior_ptr)
+ return hop.genop('getinteriorfield', vlist + [v_fieldname],
resulttype=hop.r_result.lowleveltype)
def rtype_setattr(self, hop):
v_interior_ptr, v_fieldname, v_value = hop.inputargs(self, Void, hop.args_r[2])
- v_ptr = hop.genop('getfield', [v_interior_ptr, flowmodel.Constant('ptr', Void)],
- resulttype=self.parentptrtype)
- v_offset = hop.genop('getfield', [v_interior_ptr, flowmodel.Constant('index', Void)],
- resulttype=Signed)
- return hop.genop('setinteriorfield', [v_ptr, v_offset, v_fieldname, v_value],
+ vlist = self.getinteriorfieldargs(hop, v_interior_ptr)
+ return hop.genop('setinteriorfield', vlist + [v_fieldname, v_value],
resulttype=hop.r_result.lowleveltype)
More information about the Pypy-commit
mailing list