diff options
| author | Sergey Vorfolomeev <sergey.vorfolomeev@vmssoftware.com> | 2021-04-09 08:29:05 +0500 |
|---|---|---|
| committer | Sergey Vorfolomeev <sergey.vorfolomeev@vmssoftware.com> | 2021-04-09 08:29:05 +0500 |
| commit | c48fc339035511967023aa9783ce8afc1c00a492 (patch) | |
| tree | a59352e46c3497219973c15158cd1231876099a9 /cffi | |
| parent | 836a60368633def79b7fe439be845f5272f4bc9e (diff) | |
| parent | f17762f93b1f882554b6fe12c8271f907aebf6ad (diff) | |
| download | cffi-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__.py | 4 | ||||
| -rw-r--r-- | cffi/_embedding.h | 2 | ||||
| -rw-r--r-- | cffi/recompiler.py | 18 | ||||
| -rw-r--r-- | cffi/verifier.py | 3 |
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,): |
