From ecddd10a47b61fe1a5768638fea29e5eac6db5cb Mon Sep 17 00:00:00 2001 From: Brandt Bucher Date: Thu, 5 Mar 2020 16:17:16 -0800 Subject: [PATCH 1/8] Add PEP 572 grammar docs to the Language Reference. --- Doc/reference/compound_stmts.rst | 6 +++--- Doc/reference/expressions.rst | 11 +++++++++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/Doc/reference/compound_stmts.rst b/Doc/reference/compound_stmts.rst index e2f44a55b180b1..ac2065b4cff9b1 100644 --- a/Doc/reference/compound_stmts.rst +++ b/Doc/reference/compound_stmts.rst @@ -90,8 +90,8 @@ The :keyword:`!if` statement The :keyword:`if` statement is used for conditional execution: .. productionlist:: - if_stmt: "if" `expression` ":" `suite` - : ("elif" `expression` ":" `suite`)* + if_stmt: "if" `assignment_expression` ":" `suite` + : ("elif" `assignment_expression` ":" `suite`)* : ["else" ":" `suite`] It selects exactly one of the suites by evaluating the expressions one by one @@ -116,7 +116,7 @@ The :keyword:`while` statement is used for repeated execution as long as an expression is true: .. productionlist:: - while_stmt: "while" `expression` ":" `suite` + while_stmt: "while" `assignment_expression` ":" `suite` : ["else" ":" `suite`] This repeatedly tests the expression and, if it is true, executes the first diff --git a/Doc/reference/expressions.rst b/Doc/reference/expressions.rst index d9db33a78568e4..ec1683ae71b96f 100644 --- a/Doc/reference/expressions.rst +++ b/Doc/reference/expressions.rst @@ -1642,6 +1642,17 @@ returns a boolean value regardless of the type of its argument (for example, ``not 'foo'`` produces ``False`` rather than ``''``.) +Assignment expressions +====================== + +.. productionlist:: + assignment_expression: `conditional_expression` [":=" `conditional_expression`] + +.. XXX TODO! + +See :pep:`572` for more details about assignment expressions. + + .. _if_expr: Conditional expressions From c39c071d8d820a7ed3611bfaa3e1d857e6b61dad Mon Sep 17 00:00:00 2001 From: Brandt Bucher Date: Thu, 5 Mar 2020 16:23:46 -0800 Subject: [PATCH 2/8] Update comment. --- Doc/reference/expressions.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Doc/reference/expressions.rst b/Doc/reference/expressions.rst index ec1683ae71b96f..aead0925debdc1 100644 --- a/Doc/reference/expressions.rst +++ b/Doc/reference/expressions.rst @@ -1648,7 +1648,7 @@ Assignment expressions .. productionlist:: assignment_expression: `conditional_expression` [":=" `conditional_expression`] -.. XXX TODO! +.. TODO: BPO-39868 See :pep:`572` for more details about assignment expressions. From 7377e52d01d5125ae7647fa06c9fee4793a7edd9 Mon Sep 17 00:00:00 2001 From: Brandt Bucher Date: Thu, 5 Mar 2020 16:29:13 -0800 Subject: [PATCH 3/8] NEWS. --- .../next/Documentation/2020-03-05-16-29-03.bpo-39868.JQoHhO.rst | 1 + 1 file changed, 1 insertion(+) create mode 100644 Misc/NEWS.d/next/Documentation/2020-03-05-16-29-03.bpo-39868.JQoHhO.rst diff --git a/Misc/NEWS.d/next/Documentation/2020-03-05-16-29-03.bpo-39868.JQoHhO.rst b/Misc/NEWS.d/next/Documentation/2020-03-05-16-29-03.bpo-39868.JQoHhO.rst new file mode 100644 index 00000000000000..9fa8bfd04f7dbb --- /dev/null +++ b/Misc/NEWS.d/next/Documentation/2020-03-05-16-29-03.bpo-39868.JQoHhO.rst @@ -0,0 +1 @@ +Updated the Language Reference for :pep:`572`. From 04c9445bc4d53703ad770bd9e3e73e73f3091352 Mon Sep 17 00:00:00 2001 From: Brandt Bucher Date: Thu, 5 Mar 2020 16:40:53 -0800 Subject: [PATCH 4/8] Update documented comprehension grammar. --- Doc/reference/expressions.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Doc/reference/expressions.rst b/Doc/reference/expressions.rst index aead0925debdc1..58983ae0ab20ae 100644 --- a/Doc/reference/expressions.rst +++ b/Doc/reference/expressions.rst @@ -178,7 +178,7 @@ called "displays", each of them in two flavors: Common syntax elements for comprehensions are: .. productionlist:: - comprehension: `expression` `comp_for` + comprehension: `namedexpr_test` `comp_for` comp_for: ["async"] "for" `target_list` "in" `or_test` [`comp_iter`] comp_iter: `comp_for` | `comp_if` comp_if: "if" `expression_nocond` [`comp_iter`] From 6a0f6405fcf2e4e0c9a9b1b0843f4e1bfba219b9 Mon Sep 17 00:00:00 2001 From: Brandt Bucher Date: Thu, 5 Mar 2020 17:29:44 -0800 Subject: [PATCH 5/8] Fix corner cases from PEP 572. --- Doc/reference/expressions.rst | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Doc/reference/expressions.rst b/Doc/reference/expressions.rst index 58983ae0ab20ae..5507307f983901 100644 --- a/Doc/reference/expressions.rst +++ b/Doc/reference/expressions.rst @@ -911,7 +911,8 @@ series of :term:`arguments `: : ["," `keywords_arguments`] : | `starred_and_keywords` ["," `keywords_arguments`] : | `keywords_arguments` - positional_arguments: ["*"] `expression` ("," ["*"] `expression`)* + positional_arguments: positional_item ("," positional_item)* + positional_item: `assignment_expression` | "*" `expression` starred_and_keywords: ("*" `expression` | `keyword_item`) : ("," "*" `expression` | "," `keyword_item`)* keywords_arguments: (`keyword_item` | "**" `expression`) @@ -1647,6 +1648,7 @@ Assignment expressions .. productionlist:: assignment_expression: `conditional_expression` [":=" `conditional_expression`] + assignment_expression: [`target_list` ":="] `expression` .. TODO: BPO-39868 @@ -1722,7 +1724,7 @@ Expression lists expression_list: `expression` ("," `expression`)* [","] starred_list: `starred_item` ("," `starred_item`)* [","] starred_expression: `expression` | (`starred_item` ",")* [`starred_item`] - starred_item: `expression` | "*" `or_expr` + starred_item: `assignment_expression` | "*" `or_expr` .. index:: object: tuple From d5bb4a719e4fc9924c765442ce1857d842682d72 Mon Sep 17 00:00:00 2001 From: Brandt Bucher Date: Thu, 5 Mar 2020 17:30:00 -0800 Subject: [PATCH 6/8] Remove stray line. --- Doc/reference/expressions.rst | 1 - 1 file changed, 1 deletion(-) diff --git a/Doc/reference/expressions.rst b/Doc/reference/expressions.rst index 5507307f983901..b2ab3490453a8b 100644 --- a/Doc/reference/expressions.rst +++ b/Doc/reference/expressions.rst @@ -1647,7 +1647,6 @@ Assignment expressions ====================== .. productionlist:: - assignment_expression: `conditional_expression` [":=" `conditional_expression`] assignment_expression: [`target_list` ":="] `expression` .. TODO: BPO-39868 From da3bc5327c43394091c809dae4381d8630866c8e Mon Sep 17 00:00:00 2001 From: Brandt Bucher Date: Thu, 5 Mar 2020 17:31:04 -0800 Subject: [PATCH 7/8] Fix bad copy-paste. --- Doc/reference/expressions.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Doc/reference/expressions.rst b/Doc/reference/expressions.rst index b2ab3490453a8b..ca613802cbfc36 100644 --- a/Doc/reference/expressions.rst +++ b/Doc/reference/expressions.rst @@ -178,7 +178,7 @@ called "displays", each of them in two flavors: Common syntax elements for comprehensions are: .. productionlist:: - comprehension: `namedexpr_test` `comp_for` + comprehension: `assignment_expression` `comp_for` comp_for: ["async"] "for" `target_list` "in" `or_test` [`comp_iter`] comp_iter: `comp_for` | `comp_if` comp_if: "if" `expression_nocond` [`comp_iter`] From 91d8f4dbd5b60eb7bbf5feaea42e10ffb2ac39c5 Mon Sep 17 00:00:00 2001 From: Brandt Bucher Date: Thu, 5 Mar 2020 17:46:51 -0800 Subject: [PATCH 8/8] Don't allow complex identifiers. --- Doc/reference/expressions.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Doc/reference/expressions.rst b/Doc/reference/expressions.rst index ca613802cbfc36..3fcc5e17d9a7cd 100644 --- a/Doc/reference/expressions.rst +++ b/Doc/reference/expressions.rst @@ -1647,7 +1647,7 @@ Assignment expressions ====================== .. productionlist:: - assignment_expression: [`target_list` ":="] `expression` + assignment_expression: [`identifier` ":="] `expression` .. TODO: BPO-39868