[pypy-svn] pypy fast-forward: Finally fix translation

amauryfa commits-noreply at bitbucket.org
Fri Dec 31 11:33:23 CET 2010


Author: Amaury Forgeot d'Arc <amauryfa at gmail.com>
Branch: fast-forward
Changeset: r40308:5ffe3b68db9d
Date: 2010-12-31 11:31 +0100
http://bitbucket.org/pypy/pypy/changeset/5ffe3b68db9d/

Log:	Finally fix translation I hope

diff --git a/pypy/module/_rawffi/callback.py b/pypy/module/_rawffi/callback.py
--- a/pypy/module/_rawffi/callback.py
+++ b/pypy/module/_rawffi/callback.py
@@ -4,7 +4,6 @@
 from pypy.interpreter.gateway import interp2app
 from pypy.interpreter.typedef import TypeDef, GetSetProperty
 from pypy.rpython.lltypesystem import lltype, rffi
-from pypy.module._rawffi.structure import unpack_fields
 from pypy.module._rawffi.array import get_elem, push_elem
 from pypy.module._rawffi.interp_rawffi import W_DataInstance, letter2tp, \
      wrap_value, unwrap_value, unwrap_truncate_int

diff --git a/pypy/module/_rawffi/structure.py b/pypy/module/_rawffi/structure.py
--- a/pypy/module/_rawffi/structure.py
+++ b/pypy/module/_rawffi/structure.py
@@ -17,7 +17,7 @@
 from pypy.module._rawffi.interp_rawffi import size_alignment, LL_TYPEMAP
 from pypy.module._rawffi.interp_rawffi import unroll_letters_for_numbers
 from pypy.rlib import clibffi
-from pypy.rlib.rarithmetic import intmask, r_uint, signedtype
+from pypy.rlib.rarithmetic import intmask, r_uint, signedtype, widen
 
 def unpack_fields(space, w_fields):
     fields_w = space.unpackiterable(w_fields)
@@ -251,7 +251,8 @@
             numbits = NUM_BITS(bitsize)
             lowbit = LOW_BIT(bitsize)
             if numbits:
-                current = rffi.cast(T, ptr)[0]
+                value = widen(value)
+                current = widen(rffi.cast(T, ptr)[0])
                 bitmask = BIT_MASK(numbits)
                 current &= ~ (bitmask << lowbit)
                 current |= (value & bitmask) << lowbit
@@ -273,16 +274,18 @@
             numbits = NUM_BITS(bitsize)
             lowbit = LOW_BIT(bitsize)
             if numbits:
+                value = widen(value)
                 if ll_t is lltype.Bool or signedtype(ll_t._type):
                     value >>= lowbit
                     sign = (value >> (numbits - 1)) & 1
-                    value &= rffi.cast(ll_t, BIT_MASK(numbits - 1))
+                    value &= BIT_MASK(numbits - 1)
                     if sign:
                         value = ~value
                 else:
                     # unsigned is easier
                     value >>= lowbit
-                    value &= rffi.cast(ll_t, BIT_MASK(numbits))
+                    value &= BIT_MASK(numbits)
+                value = rffi.cast(ll_t, value)
             break
 
     return value


More information about the Pypy-commit mailing list