diff --git a/src/cffi/recompiler.py b/src/cffi/recompiler.py index 7734a348..3183a4e7 100644 --- a/src/cffi/recompiler.py +++ b/src/cffi/recompiler.py @@ -93,9 +93,18 @@ def __init__(self, name, type_index, size, signed, allenums): self.allenums = allenums def as_c_expr(self): - return (' { "%s", %d, _cffi_prim_int(%s, %s),\n' - ' "%s" },' % (self.name, self.type_index, - self.size, self.signed, self.allenums)) + lines = [' { "%s", %d, _cffi_prim_int(%s, %s),' % (self.name, self.type_index, + self.size, self.signed,)] + pending = 0 + while len(self.allenums) > pending + 110: + j = self.allenums.find(',', pending + 100) + if j < 0: + break + j += 1 + lines.append(' "%s"' % (self.allenums[pending:j],)) + pending = j + lines.append(' "%s" },' % (self.allenums[pending:],)) + return '\n'.join(lines) def as_python_expr(self): prim_index = { diff --git a/testing/cffi1/test_recompiler.py b/testing/cffi1/test_recompiler.py index f36512a3..dbb67892 100644 --- a/testing/cffi1/test_recompiler.py +++ b/testing/cffi1/test_recompiler.py @@ -2575,3 +2575,22 @@ def test_convert_api_mode_builtin_function_to_cdata(): my_array_2 = ffi.new("void *[]", [lib.add1, lib.add2]) assert ffi.cast("struct s(*)(struct s)", my_array_2[1])(s).x == 302 assert ffi.typeof(lib.add1) == ffi.typeof("struct s(*)(struct s)") + +def test_large_enum(): + ffi = FFI() + biglist = ['nn%d' % i for i in range(6000)] + ffi.cdef( + """enum foo_s { %s };""" % ','.join(biglist)) + lib = verify(ffi, "test_large_enum", """ + enum foo_s { %s };""" % ','.join(biglist)) + assert lib.nn0 == 0 + assert lib.nn1234 == 1234 + assert lib.nn5999 == 5999 + e = ffi.typeof("enum foo_s") + elements = {} + relements = {} + for i in range(6000): + elements[i] = biglist[i] + relements[biglist[i]] = i + assert e.elements == elements + assert e.relements == relements