Skip to content

Commit fe99742

Browse files
mattiparigo
andauthored
apply patch from issue (#167)
Co-authored-by: Armin Rigo <arigo@tunes.org>
1 parent c5212d0 commit fe99742

2 files changed

Lines changed: 31 additions & 3 deletions

File tree

src/cffi/recompiler.py

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -93,9 +93,18 @@ def __init__(self, name, type_index, size, signed, allenums):
9393
self.allenums = allenums
9494

9595
def as_c_expr(self):
96-
return (' { "%s", %d, _cffi_prim_int(%s, %s),\n'
97-
' "%s" },' % (self.name, self.type_index,
98-
self.size, self.signed, self.allenums))
96+
lines = [' { "%s", %d, _cffi_prim_int(%s, %s),' % (self.name, self.type_index,
97+
self.size, self.signed,)]
98+
pending = 0
99+
while len(self.allenums) > pending + 110:
100+
j = self.allenums.find(',', pending + 100)
101+
if j < 0:
102+
break
103+
j += 1
104+
lines.append(' "%s"' % (self.allenums[pending:j],))
105+
pending = j
106+
lines.append(' "%s" },' % (self.allenums[pending:],))
107+
return '\n'.join(lines)
99108

100109
def as_python_expr(self):
101110
prim_index = {

testing/cffi1/test_recompiler.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2576,3 +2576,22 @@ def test_convert_api_mode_builtin_function_to_cdata():
25762576
my_array_2 = ffi.new("void *[]", [lib.add1, lib.add2])
25772577
assert ffi.cast("struct s(*)(struct s)", my_array_2[1])(s).x == 302
25782578
assert ffi.typeof(lib.add1) == ffi.typeof("struct s(*)(struct s)")
2579+
2580+
def test_large_enum():
2581+
ffi = FFI()
2582+
biglist = ['nn%d' % i for i in range(6000)]
2583+
ffi.cdef(
2584+
"""enum foo_s { %s };""" % ','.join(biglist))
2585+
lib = verify(ffi, "test_large_enum", """
2586+
enum foo_s { %s };""" % ','.join(biglist))
2587+
assert lib.nn0 == 0
2588+
assert lib.nn1234 == 1234
2589+
assert lib.nn5999 == 5999
2590+
e = ffi.typeof("enum foo_s")
2591+
elements = {}
2592+
relements = {}
2593+
for i in range(6000):
2594+
elements[i] = biglist[i]
2595+
relements[biglist[i]] = i
2596+
assert e.elements == elements
2597+
assert e.relements == relements

0 commit comments

Comments
 (0)