summaryrefslogtreecommitdiff
path: root/cffi
diff options
context:
space:
mode:
authorSergey Vorfolomeev <sergey.vorfolomeev@vmssoftware.com>2021-04-09 08:29:05 +0500
committerSergey Vorfolomeev <sergey.vorfolomeev@vmssoftware.com>2021-04-09 08:29:05 +0500
commitc48fc339035511967023aa9783ce8afc1c00a492 (patch)
treea59352e46c3497219973c15158cd1231876099a9 /cffi
parent836a60368633def79b7fe439be845f5272f4bc9e (diff)
parentf17762f93b1f882554b6fe12c8271f907aebf6ad (diff)
downloadcffi-openvms.tar.gz
merge default to 'openvms'openvms
changed: .hgtags c/_cffi_backend.c c/ffi_obj.c c/test_c.py cffi/__init__.py cffi/_embedding.h cffi/recompiler.py cffi/verifier.py doc/source/conf.py doc/source/installation.rst doc/source/whatsnew.rst setup.py setup_base.py testing/cffi0/test_ffi_backend.py testing/cffi0/test_version.py testing/cffi1/test_re_python.py
Diffstat (limited to 'cffi')
-rw-r--r--cffi/__init__.py4
-rw-r--r--cffi/_embedding.h2
-rw-r--r--cffi/recompiler.py18
-rw-r--r--cffi/verifier.py3
4 files changed, 19 insertions, 8 deletions
diff --git a/cffi/__init__.py b/cffi/__init__.py
index 264afa1..b79c21f 100644
--- a/cffi/__init__.py
+++ b/cffi/__init__.py
@@ -5,8 +5,8 @@ from .api import FFI
from .error import CDefError, FFIError, VerificationError, VerificationMissing
from .error import PkgConfigError
-__version__ = "1.14.3"
-__version_info__ = (1, 14, 3)
+__version__ = "1.14.5"
+__version_info__ = (1, 14, 5)
# The verifier module file names are based on the CRC32 of a string that
# contains the following version number. It may be older than __version__
diff --git a/cffi/_embedding.h b/cffi/_embedding.h
index fdce222..c36d793 100644
--- a/cffi/_embedding.h
+++ b/cffi/_embedding.h
@@ -224,7 +224,7 @@ static int _cffi_initialize_python(void)
if (f != NULL && f != Py_None) {
PyFile_WriteString("\nFrom: " _CFFI_MODULE_NAME
- "\ncompiled with cffi version: 1.14.3"
+ "\ncompiled with cffi version: 1.14.5"
"\n_cffi_backend module: ", f);
modules = PyImport_GetModuleDict();
mod = PyDict_GetItemString(modules, "_cffi_backend");
diff --git a/cffi/recompiler.py b/cffi/recompiler.py
index 457d6f9..5369722 100644
--- a/cffi/recompiler.py
+++ b/cffi/recompiler.py
@@ -193,6 +193,17 @@ class Recompiler:
assert isinstance(op, CffiOp)
self.cffi_types = tuple(self.cffi_types) # don't change any more
+ def _enum_fields(self, tp):
+ # When producing C, expand all anonymous struct/union fields.
+ # That's necessary to have C code checking the offsets of the
+ # individual fields contained in them. When producing Python,
+ # don't do it and instead write it like it is, with the
+ # corresponding fields having an empty name. Empty names are
+ # recognized at runtime when we import the generated Python
+ # file.
+ expand_anonymous_struct_union = not self.target_is_python
+ return tp.enumfields(expand_anonymous_struct_union)
+
def _do_collect_type(self, tp):
if not isinstance(tp, model.BaseTypeByIdentity):
if isinstance(tp, tuple):
@@ -206,7 +217,7 @@ class Recompiler:
elif isinstance(tp, model.StructOrUnion):
if tp.fldtypes is not None and (
tp not in self.ffi._parser._included_declarations):
- for name1, tp1, _, _ in tp.enumfields():
+ for name1, tp1, _, _ in self._enum_fields(tp):
self._do_collect_type(self._field_type(tp, name1, tp1))
else:
for _, x in tp._get_items():
@@ -864,7 +875,7 @@ class Recompiler:
prnt('{')
prnt(' /* only to generate compile-time warnings or errors */')
prnt(' (void)p;')
- for fname, ftype, fbitsize, fqual in tp.enumfields():
+ for fname, ftype, fbitsize, fqual in self._enum_fields(tp):
try:
if ftype.is_integer_type() or fbitsize >= 0:
# accept all integers, but complain on float or double
@@ -920,8 +931,7 @@ class Recompiler:
flags = '|'.join(flags) or '0'
c_fields = []
if reason_for_not_expanding is None:
- expand_anonymous_struct_union = not self.target_is_python
- enumfields = list(tp.enumfields(expand_anonymous_struct_union))
+ enumfields = list(self._enum_fields(tp))
for fldname, fldtype, fbitsize, fqual in enumfields:
fldtype = self._field_type(tp, fldname, fldtype)
self._check_not_opaque(fldtype,
diff --git a/cffi/verifier.py b/cffi/verifier.py
index 84fc8b5..c445675 100644
--- a/cffi/verifier.py
+++ b/cffi/verifier.py
@@ -50,7 +50,8 @@ class Verifier(object):
if tag:
raise TypeError("can't specify both 'modulename' and 'tag'")
else:
- key = '\x00'.join([sys.version[:3], __version_verifier_modules__,
+ key = '\x00'.join(['%d.%d' % sys.version_info[:2],
+ __version_verifier_modules__,
preamble, flattened_kwds] +
ffi._cdefsources)
if sys.version_info >= (3,):