[pypy-commit] pypy py3k: fix jit translation, now that elidable is stricter

pjenvey noreply at buildbot.pypy.org
Tue May 13 20:29:37 CEST 2014


Author: Philip Jenvey <pjenvey at underboss.org>
Branch: py3k
Changeset: r71490:5ce8d091277f
Date: 2014-05-12 18:17 -0700
http://bitbucket.org/pypy/pypy/changeset/5ce8d091277f/

Log:	fix jit translation, now that elidable is stricter

diff --git a/pypy/module/_rawffi/alt/interp_struct.py b/pypy/module/_rawffi/alt/interp_struct.py
--- a/pypy/module/_rawffi/alt/interp_struct.py
+++ b/pypy/module/_rawffi/alt/interp_struct.py
@@ -7,7 +7,7 @@
 from pypy.interpreter.baseobjspace import W_Root
 from pypy.interpreter.typedef import TypeDef, interp_attrproperty
 from pypy.interpreter.gateway import interp2app, unwrap_spec
-from pypy.interpreter.error import oefmt
+from pypy.interpreter.error import OperationError, oefmt
 from pypy.module._rawffi.alt.interp_ffitype import W_FFIType
 from pypy.module._rawffi.alt.type_converter import FromAppLevelConverter, ToAppLevelConverter
 
@@ -99,12 +99,16 @@
         rawmem = rffi.cast(rffi.VOIDP, addr)
         return W__StructInstance(self, allocate=False, autofree=True, rawmem=rawmem)
 
+    def get_type_and_offset_for_field(self, space, w_name):
+        name = space.str_w(w_name)
+        try:
+            return self._get_type_and_offset_for_field(space, name)
+        except KeyError:
+            raise OperationError(space.w_AttributeError, w_name)
+
     @jit.elidable_promote('0')
-    def get_type_and_offset_for_field(self, space, name):
-        try:
-            w_field = self.name2w_field[name]
-        except KeyError:
-            raise oefmt(space.w_AttributeError, '%s', name)
+    def _get_type_and_offset_for_field(self, space, name):
+        w_field = self.name2w_field[name]
         return w_field.w_ffitype, w_field.offset
 
 
@@ -178,17 +182,15 @@
         addr = rffi.cast(rffi.ULONG, self.rawmem)
         return space.wrap(addr)
 
-    @unwrap_spec(name=str)
-    def getfield(self, space, name):
+    def getfield(self, space, w_name):
         w_ffitype, offset = self.structdescr.get_type_and_offset_for_field(
-            space, name)
+            space, w_name)
         field_getter = GetFieldConverter(space, self.rawmem, offset)
         return field_getter.do_and_wrap(w_ffitype)
 
-    @unwrap_spec(name=str)
-    def setfield(self, space, name, w_value):
+    def setfield(self, space, w_name, w_value):
         w_ffitype, offset = self.structdescr.get_type_and_offset_for_field(
-            space, name)
+            space, w_name)
         field_setter = SetFieldConverter(space, self.rawmem, offset)
         field_setter.unwrap_and_do(w_ffitype, w_value)
 


More information about the pypy-commit mailing list