Author: Armin Rigo <[email protected]>
Branch: cffi-1.0
Changeset: r77364:d32594c2fd89
Date: 2015-05-17 21:15 +0200
http://bitbucket.org/pypy/pypy/changeset/d32594c2fd89/
Log: test_enum
diff --git a/pypy/module/_cffi_backend/cdlopen.py
b/pypy/module/_cffi_backend/cdlopen.py
--- a/pypy/module/_cffi_backend/cdlopen.py
+++ b/pypy/module/_cffi_backend/cdlopen.py
@@ -6,7 +6,7 @@
from pypy.module._rawffi.interp_rawffi import wrap_dlopenerror
from pypy.module._cffi_backend.parse_c_type import (
- _CFFI_OPCODE_T, GLOBAL_S, CDL_INTCONST_S, STRUCT_UNION_S, FIELD_S,
+ _CFFI_OPCODE_T, GLOBAL_S, CDL_INTCONST_S, STRUCT_UNION_S, FIELD_S, ENUM_S,
ll_set_cdl_realize_global_int)
from pypy.module._cffi_backend.realize_c_type import getop
from pypy.module._cffi_backend.lib_obj import W_LibObject
@@ -85,7 +85,7 @@
i = self.string.find('\x00', frm)
if i < 0:
i = len(self.string)
- pos = i + 1
+ self.pos = i + 1
p = rffi.str2charp(self.string[frm : i])
self.ffi._finalizer.free_mems.append(p)
return p
@@ -203,4 +203,18 @@
ffi.ctxobj.ctx.c_fields = nfields
rffi.setintfield(ffi.ctxobj.ctx, 'c_num_struct_unions', n)
+ if w_enums:
+ # unpack a tuple of strings, each of which describes one enum_s entry
+ enums_w = space.fixedview(w_enums)
+ n = len(enums_w)
+ nenums = allocate_array(ffi, ENUM_S, n)
+ for i in range(n):
+ decoder = StringDecoder(ffi, space.str_w(enums_w[i]))
+ rffi.setintfield(nenums[i], 'c_type_index', decoder.next_4bytes())
+ rffi.setintfield(nenums[i], 'c_type_prim', decoder.next_4bytes())
+ nenums[i].c_name = decoder.next_name()
+ nenums[i].c_enumerators = decoder.next_name()
+ ffi.ctxobj.ctx.c_enums = nenums
+ rffi.setintfield(ffi.ctxobj.ctx, 'c_num_enums', n)
+
# ... XXXX
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit