Skip to content

Commit 3fb429c

Browse files
committed
Allow same r.h.s. in annotated assignments as in normal ones.
cpython commit: 62c35a8a8ff5854ed470b1c16a7a14f3bb80368c
1 parent e92da74 commit 3fb429c

File tree

1 file changed

+21
-5
lines changed

1 file changed

+21
-5
lines changed

src/statements.rs

+21-5
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ named!(small_stmt<StrSpan, Statement>,
5858

5959
// expr_stmt: testlist_star_expr (annassign | augassign (yield_expr|testlist) |
6060
// ('=' (yield_expr|testlist_star_expr))*)
61-
// annassign: ':' test ['=' test]
61+
// annassign: ':' test ['=' (yield_expr|testlist)]
6262
named!(expr_stmt<StrSpan, Statement>,
6363
do_parse!(
6464
lhs: call!(ExpressionParser::<NewlinesAreNotSpaces>::testlist_star_expr) >>
@@ -67,12 +67,13 @@ named!(expr_stmt<StrSpan, Statement>,
6767
do_parse!(
6868
char!(':') >>
6969
typed: call!(ExpressionParser::<NewlinesAreNotSpaces>::test) >>
70-
rhs: opt!(ws_nonl!(preceded!(char!('='),
71-
call!(ExpressionParser::<NewlinesAreNotSpaces>::test)
72-
))) >> (
70+
rhs: opt!(ws_nonl!(preceded!(char!('='), alt!(
71+
call!(ExpressionParser::<NewlinesAreNotSpaces>::yield_expr) => { |e| vec![e] }
72+
| call!(ExpressionParser::<NewlinesAreNotSpaces>::testlist)
73+
)))) >> (
7374
match rhs {
7475
None => Statement::TypeAnnotation(lhs.clone(), *typed),
75-
Some(rhs) => Statement::TypedAssignment(lhs.clone(), *typed, vec![*rhs]),
76+
Some(rhs) => Statement::TypedAssignment(lhs.clone(), *typed, rhs),
7677
}
7778
)
7879
)
@@ -1093,6 +1094,21 @@ mod tests {
10931094
);
10941095
}
10951096

1097+
#[test]
1098+
fn test_augassign_yield() {
1099+
assert_parse_eq(
1100+
small_stmt(make_strspan("foo:bar = yield baz")),
1101+
Ok((
1102+
make_strspan(""),
1103+
Statement::TypedAssignment(
1104+
vec![Expression::Name("foo".to_string())],
1105+
Expression::Name("bar".to_string()),
1106+
vec![Expression::Yield(vec![Expression::Name("baz".to_string())])],
1107+
),
1108+
)),
1109+
);
1110+
}
1111+
10961112
#[test]
10971113
fn test_unpack_assign() {
10981114
assert_parse_eq(

0 commit comments

Comments
 (0)