[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