Author: Armin Rigo <[email protected]>
Branch:
Changeset: r77703:03f97908cc28
Date: 2015-05-30 13:56 +0200
http://bitbucket.org/pypy/pypy/changeset/03f97908cc28/
Log: update to cffi/3c02643ecb69
diff --git a/pypy/module/_cffi_backend/cffi_opcode.py
b/pypy/module/_cffi_backend/cffi_opcode.py
--- a/pypy/module/_cffi_backend/cffi_opcode.py
+++ b/pypy/module/_cffi_backend/cffi_opcode.py
@@ -105,6 +105,7 @@
PRIM_UINTMAX = 47
_NUM_PRIM = 48
+_UNKNOWN_PRIM = -1
PRIMITIVE_TO_INDEX = {
'char': PRIM_CHAR,
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
@@ -69,19 +69,27 @@
"intmax_t",
"uintmax_t",
]
+ assert len(NAMES) == cffi_opcode._NUM_PRIM
+
def __init__(self, space):
self.all_primitives = [None] * cffi_opcode._NUM_PRIM
-def get_primitive_type(space, num):
+def get_primitive_type(ffi, num):
+ space = ffi.space
+ if not (0 <= num < cffi_opcode._NUM_PRIM):
+ if num == cffi_opcode._UNKNOWN_PRIM:
+ raise oefmt(ffi.w_FFIError, "primitive integer type with an "
+ "unexpected size (or not an integer type at all)")
+ else:
+ raise oefmt(space.w_NotImplementedError, "prim=%d", num)
realize_cache = space.fromcache(RealizeCache)
w_ctype = realize_cache.all_primitives[num]
if w_ctype is None:
if num == cffi_opcode.PRIM_VOID:
w_ctype = newtype.new_void_type(space)
- elif 0 <= num < len(RealizeCache.NAMES) and RealizeCache.NAMES[num]:
+ else:
+ assert RealizeCache.NAMES[num]
w_ctype = newtype.new_primitive_type(space,
RealizeCache.NAMES[num])
- else:
- raise oefmt(space.w_NotImplementedError, "prim=%d", num)
realize_cache.all_primitives[num] = w_ctype
return w_ctype
@@ -296,7 +304,7 @@
return ffi.cached_types[type_index] #found already in the "primary"
slot
space = ffi.space
- w_basetd = get_primitive_type(space, rffi.getintfield(e, 'c_type_prim'))
+ w_basetd = get_primitive_type(ffi, rffi.getintfield(e, 'c_type_prim'))
enumerators_w = []
enumvalues_w = []
@@ -344,7 +352,7 @@
case = getop(op)
if case == cffi_opcode.OP_PRIMITIVE:
- x = get_primitive_type(ffi.space, getarg(op))
+ x = get_primitive_type(ffi, getarg(op))
elif case == cffi_opcode.OP_POINTER:
y = realize_c_type_or_func(ffi, opcodes, getarg(op))
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit