@@ -58,7 +58,7 @@ named!(small_stmt<StrSpan, Statement>,
58
58
59
59
// expr_stmt: testlist_star_expr (annassign | augassign (yield_expr|testlist) |
60
60
// ('=' (yield_expr|testlist_star_expr))*)
61
- // annassign: ':' test ['=' test ]
61
+ // annassign: ':' test ['=' (yield_expr|testlist) ]
62
62
named ! ( expr_stmt<StrSpan , Statement >,
63
63
do_parse!(
64
64
lhs: call!( ExpressionParser :: <NewlinesAreNotSpaces >:: testlist_star_expr) >>
@@ -67,12 +67,13 @@ named!(expr_stmt<StrSpan, Statement>,
67
67
do_parse!(
68
68
char !( ':' ) >>
69
69
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
+ ) ) ) ) >> (
73
74
match rhs {
74
75
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) ,
76
77
}
77
78
)
78
79
)
@@ -1093,6 +1094,21 @@ mod tests {
1093
1094
) ;
1094
1095
}
1095
1096
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
+
1096
1112
#[ test]
1097
1113
fn test_unpack_assign ( ) {
1098
1114
assert_parse_eq (
0 commit comments