diff options
author | Guido van Rossum <guido@python.org> | 2019-06-12 00:23:12 (GMT) |
---|---|---|
committer | Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> | 2019-06-12 00:23:12 (GMT) |
commit | 10b55c1643b512b3a2cae8ab89c53683a13ca43e (patch) | |
tree | 3364d39f7940f01daf84ae0b319a10680059f38b | |
parent | 04856c2193eb72d72c46b57fa08095235d732a73 (diff) | |
download | cpython-10b55c1643b512b3a2cae8ab89c53683a13ca43e.zip cpython-10b55c1643b512b3a2cae8ab89c53683a13ca43e.tar.gz cpython-10b55c1643b512b3a2cae8ab89c53683a13ca43e.tar.bz2 |
bpo-35766: Change format for feature_version to (major, minor) (GH-13992)
(A single int is still allowed, but undocumented.)
https://bugs.python.org/issue35766
-rw-r--r-- | Doc/library/ast.rst | 13 | ||||
-rw-r--r-- | Doc/whatsnew/3.8.rst | 6 | ||||
-rw-r--r-- | Lib/ast.py | 9 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Library/2019-06-11-16-41-40.bpo-35766.v1Kj-T.rst | 1 |
4 files changed, 19 insertions, 10 deletions
diff --git a/Doc/library/ast.rst b/Doc/library/ast.rst index 1884bea..1e71838 100644 --- a/Doc/library/ast.rst +++ b/Doc/library/ast.rst @@ -126,7 +126,7 @@ The abstract grammar is currently defined as follows: Apart from the node classes, the :mod:`ast` module defines these utility functions and classes for traversing abstract syntax trees: -.. function:: parse(source, filename='<unknown>', mode='exec', *, type_comments=False, feature_version=-1) +.. function:: parse(source, filename='<unknown>', mode='exec', *, type_comments=False, feature_version=None) Parse the source into an AST node. Equivalent to ``compile(source, filename, mode, ast.PyCF_ONLY_AST)``. @@ -145,11 +145,12 @@ and classes for traversing abstract syntax trees: modified to correspond to :pep:`484` "signature type comments", e.g. ``(str, int) -> List[str]``. - Also, setting ``feature_version`` to the minor version of an - earlier Python 3 version will attempt to parse using that version's - grammar. For example, setting ``feature_version=4`` will allow - the use of ``async`` and ``await`` as variable names. The lowest - supported value is 4; the highest is ``sys.version_info[1]``. + Also, setting ``feature_version`` to a tuple ``(major, minor)`` + will attempt to parse using that Python version's grammar. + Currently ``major`` must equal to ``3``. For example, setting + ``feature_version=(3, 4)`` will allow the use of ``async`` and + ``await`` as variable names. The lowest supported version is + ``(3, 4)``; the highest is ``sys.version_info[0:2]``. .. warning:: It is possible to crash the Python interpreter with a diff --git a/Doc/whatsnew/3.8.rst b/Doc/whatsnew/3.8.rst index eb27613..2645864 100644 --- a/Doc/whatsnew/3.8.rst +++ b/Doc/whatsnew/3.8.rst @@ -378,9 +378,9 @@ The :func:`ast.parse` function has some new flags: * ``mode='func_type'`` can be used to parse :pep:`484` "signature type comments" (returned for function definition AST nodes); -* ``feature_version=N`` allows specifying the minor version of an - earlier Python 3 version. (For example, ``feature_version=4`` will - treat ``async`` and ``await`` as non-reserved words.) +* ``feature_version=(3, N)`` allows specifying an earlier Python 3 + version. (For example, ``feature_version=(3, 4)`` will treat + ``async`` and ``await`` as non-reserved words.) New function :func:`ast.get_source_segment` returns the source code for a specific AST node. @@ -28,7 +28,7 @@ from _ast import * def parse(source, filename='<unknown>', mode='exec', *, - type_comments=False, feature_version=-1): + type_comments=False, feature_version=None): """ Parse the source into an AST node. Equivalent to compile(source, filename, mode, PyCF_ONLY_AST). @@ -37,6 +37,13 @@ def parse(source, filename='<unknown>', mode='exec', *, flags = PyCF_ONLY_AST if type_comments: flags |= PyCF_TYPE_COMMENTS + if isinstance(feature_version, tuple): + major, minor = feature_version # Should be a 2-tuple. + assert major == 3 + feature_version = minor + elif feature_version is None: + feature_version = -1 + # Else it should be an int giving the minor version for 3.x. return compile(source, filename, mode, flags, feature_version=feature_version) diff --git a/Misc/NEWS.d/next/Library/2019-06-11-16-41-40.bpo-35766.v1Kj-T.rst b/Misc/NEWS.d/next/Library/2019-06-11-16-41-40.bpo-35766.v1Kj-T.rst new file mode 100644 index 0000000..6dd4999 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2019-06-11-16-41-40.bpo-35766.v1Kj-T.rst @@ -0,0 +1 @@ +Change the format of feature_version to be a (major, minor) tuple. |