Commit e87fb0ab authored by Stefan Behnel's avatar Stefan Behnel

exec() did not allow recent Python syntax features in Py3.8+ due to...

exec() did not allow recent Python syntax features in Py3.8+ due to https://bugs.python.org/issue35975
Closes https://github.com/cython/cython/issues/3695
parent a7a3dafc
......@@ -11,6 +11,10 @@ Bugs fixed
* Fix a regression in 0.29.20 where ``__div__`` failed to be found in extension types.
(Github issue #3688)
* ``exec()`` did not allow recent Python syntax features in Py3.8+ due to
https://bugs.python.org/issue35975.
(Github issue #3695)
* Binding staticmethods of Cython functions were not behaving like Python methods in Py3.
Patch by Jeroen Demeyer and Michał Górny. (Github issue #3106)
......
......@@ -128,6 +128,9 @@ static PyObject* __Pyx_PyExec3(PyObject* o, PyObject* globals, PyObject* locals)
} else {
PyCompilerFlags cf;
cf.cf_flags = 0;
#if PY_VERSION_HEX >= 0x030800A3
cf.cf_feature_version = PY_MINOR_VERSION;
#endif
if (PyUnicode_Check(o)) {
cf.cf_flags = PyCF_SOURCE_IS_UTF8;
s = PyUnicode_AsUTF8String(o);
......
......@@ -145,3 +145,18 @@ def exec_invalid_type(x):
TypeError: exec: arg 1 must be string, bytes or code object, got int
"""
exec x in {}
def exec_with_new_features(s, d):
"""
>>> import sys
>>> pyversion = sys.version_info[:2]
>>> d = {}
>>> exec_with_new_features('print(123)', d)
123
>>> if pyversion == (2, 7): exec_with_new_features('exec "123"', d)
>>> if pyversion >= (3, 6): exec_with_new_features('f = f"abc"', d)
>>> if pyversion >= (3, 8): exec_with_new_features('a = (b := 1)', d)
"""
exec s in d
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment