Author: Armin Rigo <ar...@tunes.org> Branch: stm Changeset: r47627:7812e44b10c5 Date: 2011-09-27 15:23 +0200 http://bitbucket.org/pypy/pypy/changeset/7812e44b10c5/
Log: stm_getfield in genc. diff --git a/pypy/translator/c/funcgen.py b/pypy/translator/c/funcgen.py --- a/pypy/translator/c/funcgen.py +++ b/pypy/translator/c/funcgen.py @@ -589,6 +589,22 @@ return '%s = %s.length;'%(self.expr(op.result), expr) + def OP_STM_GETFIELD(self, op): + assert isinstance(op.args[1], Constant) + STRUCT = self.lltypemap(op.args[0]).TO + structdef = self.db.gettypedefnode(STRUCT) + baseexpr_is_const = isinstance(op.args[0], Constant) + sourceexpr = structdef.ptr_access_expr(self.expr(op.args[0]), + op.args[1].value, + baseexpr_is_const) + # + T = self.lltypemap(op.result) + assert T is not Void + typename = self.db.gettype(T) + newvalue = self.expr(op.result) + return '%s = (%s)stm_read_word((void**)&%s);' % ( + newvalue, cdecl(typename, ''), sourceexpr) + def OP_PTR_NONZERO(self, op): return '%s = (%s != NULL);' % (self.expr(op.result), diff --git a/pypy/translator/stm/rstm.py b/pypy/translator/stm/rstm.py --- a/pypy/translator/stm/rstm.py +++ b/pypy/translator/stm/rstm.py @@ -1,5 +1,8 @@ from pypy.rpython.lltypesystem import lltype, rffi +from pypy.rpython.extregistry import ExtRegistryEntry from pypy.translator.stm import _rffi_stm +from pypy.annotation import model as annmodel +from pypy.objspace.flow.model import Constant def stm_getfield(structptr, fieldname): @@ -13,3 +16,20 @@ p = rffi.cast(rffi.VOIDPP, p) pval = rffi.cast(rffi.VOIDP, newvalue) _rffi_stm.stm_write_word(p, pval) + + +# ____________________________________________________________ + +class ExtEntry(ExtRegistryEntry): + _about_ = stm_getfield + + def compute_result_annotation(self, s_structptr, s_fieldname): + return annmodel.SomeInteger() + + def specialize_call(self, hop): + r_structptr = hop.args_r[0] + v_structptr = hop.inputarg(r_structptr, arg=0) + fieldname = hop.args_v[1].value + c_fieldname = hop.inputconst(lltype.Void, fieldname) + return hop.genop('stm_getfield', [v_structptr, c_fieldname], + resulttype = lltype.Signed) _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit