[pypy-commit] pypy cffi-1.0: Translation fixes (yay test_ztranslation)

arigo noreply at buildbot.pypy.org
Fri May 8 18:22:57 CEST 2015


Author: Armin Rigo <arigo at tunes.org>
Branch: cffi-1.0
Changeset: r77227:84657c90a123
Date: 2015-05-08 18:23 +0200
http://bitbucket.org/pypy/pypy/changeset/84657c90a123/

Log:	Translation fixes (yay test_ztranslation)

diff --git a/pypy/module/_cffi_backend/ffi_obj.py b/pypy/module/_cffi_backend/ffi_obj.py
--- a/pypy/module/_cffi_backend/ffi_obj.py
+++ b/pypy/module/_cffi_backend/ffi_obj.py
@@ -2,7 +2,7 @@
 from pypy.interpreter.baseobjspace import W_Root
 from pypy.interpreter.typedef import TypeDef, GetSetProperty, ClassAttr
 from pypy.interpreter.gateway import interp2app, unwrap_spec, WrappedDefault
-from rpython.rlib import jit, rgc
+from rpython.rlib import jit, rgc, nonconst
 from rpython.rtyper.lltypesystem import rffi
 
 from pypy.module._cffi_backend import parse_c_type, realize_c_type
@@ -34,7 +34,7 @@
 
 class W_FFIObject(W_Root):
 
-    def __init__(self, space, src_ctx=parse_c_type.NULL_CTX):
+    def __init__(self, space, src_ctx):
         self.space = space
         self.types_dict = {}
         self.ctxobj = parse_c_type.allocate_ctxobj(src_ctx)
@@ -339,7 +339,9 @@
 
 def W_FFIObject___new__(space, w_subtype, __args__):
     r = space.allocate_instance(W_FFIObject, w_subtype)
-    r.__init__(space)
+    # get in 'src_ctx' a NULL which transaction doesn't consider a constant
+    src_ctx = rffi.cast(parse_c_type.PCTX, nonconst.NonConstant(0))
+    r.__init__(space, src_ctx)
     return space.wrap(r)
 
 def make_NULL(space):
diff --git a/pypy/module/_cffi_backend/realize_c_type.py b/pypy/module/_cffi_backend/realize_c_type.py
--- a/pypy/module/_cffi_backend/realize_c_type.py
+++ b/pypy/module/_cffi_backend/realize_c_type.py
@@ -1,5 +1,6 @@
 import sys
 from rpython.rlib.rarithmetic import intmask
+from rpython.rlib.objectmodel import specialize
 from rpython.rtyper.lltypesystem import lltype, rffi
 from pypy.interpreter.error import oefmt
 from pypy.interpreter.baseobjspace import W_Root
@@ -8,9 +9,11 @@
 from pypy.module._cffi_backend import parse_c_type
 
 
+ at specialize.ll()
 def getop(op):
     return rffi.cast(rffi.SIGNED, op) & 0xFF
 
+ at specialize.ll()
 def getarg(op):
     return rffi.cast(rffi.SIGNED, op) >> 8
 
@@ -78,7 +81,7 @@
         elif 0 <= num < len(RealizeCache.NAMES) and RealizeCache.NAMES[num]:
             w_ctype = newtype.new_primitive_type(space, RealizeCache.NAMES[num])
         else:
-            raise oefmt(ffi.space.w_NotImplementedError, "prim=%d", case)
+            raise oefmt(space.w_NotImplementedError, "prim=%d", num)
         realize_cache.all_primitives[num] = w_ctype
     return w_ctype
 
@@ -99,15 +102,16 @@
     neg = rffi.cast(lltype.Signed, neg)
 
     if neg == 0:     # positive
-        if value <= sys.maxint:
+        if value <= rffi.cast(rffi.ULONGLONG, sys.maxint):
             return ffi.space.wrap(intmask(value))
         else:
             return ffi.space.wrap(value)
     elif neg == 1:   # negative
+        value = rffi.cast(rffi.LONGLONG, value)
         if value >= -sys.maxint-1:
             return ffi.space.wrap(intmask(value))
         else:
-            return ffi.space.wrap(rffi.cast(rffi.LONGLONG, value))
+            return ffi.space.wrap(value)
 
     if neg == 2:
         got = "%d (0x%x)" % (value, value)
@@ -240,8 +244,8 @@
 
     name = _realize_name("enum ", e.c_name)
     w_ctype = newtype.new_enum_type(space, name,
-                                    space.newtuple(enumerators_w),
-                                    space.newtuple(enumvalues_w),
+                                    space.newlist(enumerators_w),
+                                    space.newlist(enumvalues_w),
                                     w_basetd)
 
     # Update the "primary" OP_ENUM slot
@@ -389,7 +393,7 @@
     assert w_ctype._fields_list is not None       # not lazy any more
 
     w_ctype._lazy_ffi = None
-    w_ctype._lazy_s = lltype.nullptr(parse_c_type.FIELD_S)
+    w_ctype._lazy_s = lltype.nullptr(parse_c_type.STRUCT_UNION_S)
 
 
 def _fetch_external_struct_or_union(s, included_libs):


More information about the pypy-commit mailing list