summaryrefslogtreecommitdiff
path: root/cffi/cparser.py
diff options
context:
space:
mode:
authorArmin Rigo <arigo@tunes.org>2016-09-20 15:07:37 +0200
committerArmin Rigo <arigo@tunes.org>2016-09-20 15:07:37 +0200
commitd067b48aa4660487e050e396ff957d916d5183c4 (patch)
treede2d0d20c05b7f953228215a3ab70565c5ff0967 /cffi/cparser.py
parenta06fe3e6a57efd4ec549234ad348152a40543439 (diff)
downloadcffi-d067b48aa4660487e050e396ff957d916d5183c4.tar.gz
typedef int foo_t[...];
Diffstat (limited to 'cffi/cparser.py')
-rw-r--r--cffi/cparser.py9
1 files changed, 6 insertions, 3 deletions
diff --git a/cffi/cparser.py b/cffi/cparser.py
index b49d8bd..47ed537 100644
--- a/cffi/cparser.py
+++ b/cffi/cparser.py
@@ -332,7 +332,7 @@ class Parser(object):
realtype = model.unknown_ptr_type(decl.name)
else:
realtype, quals = self._get_type_and_quals(
- decl.type, name=decl.name)
+ decl.type, name=decl.name, partial_length_ok=True)
self._declare('typedef ' + decl.name, realtype, quals=quals)
else:
raise api.CDefError("unrecognized construct", decl)
@@ -781,11 +781,14 @@ class Parser(object):
exprnode.name in self._int_constants):
return self._int_constants[exprnode.name]
#
- if partial_length_ok:
- if (isinstance(exprnode, pycparser.c_ast.ID) and
+ if (isinstance(exprnode, pycparser.c_ast.ID) and
exprnode.name == '__dotdotdotarray__'):
+ if partial_length_ok:
self._partial_length = True
return '...'
+ raise api.FFIError(":%d: unsupported '[...]' here, cannot derive "
+ "the actual array length in this context"
+ % exprnode.coord.line)
#
raise api.FFIError(":%d: unsupported expression: expected a "
"simple numeric constant" % exprnode.coord.line)