summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>2019-06-12 00:23:12 (GMT)
committerMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2019-06-12 00:23:12 (GMT)
commit10b55c1643b512b3a2cae8ab89c53683a13ca43e (patch)
tree3364d39f7940f01daf84ae0b319a10680059f38b
parent04856c2193eb72d72c46b57fa08095235d732a73 (diff)
downloadcpython-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.rst13
-rw-r--r--Doc/whatsnew/3.8.rst6
-rw-r--r--Lib/ast.py9
-rw-r--r--Misc/NEWS.d/next/Library/2019-06-11-16-41-40.bpo-35766.v1Kj-T.rst1
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.
diff --git a/Lib/ast.py b/Lib/ast.py
index 64e7a25..70fbbdd 100644
--- a/Lib/ast.py
+++ b/Lib/ast.py
@@ -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.