@@ -56,6 +56,8 @@ pub enum AssocOp {
56
56
GreaterEqual ,
57
57
/// `=`
58
58
Assign ,
59
+ /// `<-`
60
+ ObsoleteInPlace ,
59
61
/// `?=` where ? is one of the BinOpToken
60
62
AssignOp ( BinOpToken ) ,
61
63
/// `as`
@@ -84,6 +86,7 @@ impl AssocOp {
84
86
use self :: AssocOp :: * ;
85
87
match * t {
86
88
Token :: BinOpEq ( k) => Some ( AssignOp ( k) ) ,
89
+ Token :: LArrow => Some ( ObsoleteInPlace ) ,
87
90
Token :: Eq => Some ( Assign ) ,
88
91
Token :: BinOp ( BinOpToken :: Star ) => Some ( Multiply ) ,
89
92
Token :: BinOp ( BinOpToken :: Slash ) => Some ( Divide ) ,
@@ -153,6 +156,7 @@ impl AssocOp {
153
156
LAnd => 6 ,
154
157
LOr => 5 ,
155
158
DotDot | DotDotEq => 4 ,
159
+ ObsoleteInPlace => 3 ,
156
160
Assign | AssignOp ( _) => 2 ,
157
161
}
158
162
}
@@ -162,7 +166,7 @@ impl AssocOp {
162
166
use self :: AssocOp :: * ;
163
167
// NOTE: it is a bug to have an operators that has same precedence but different fixities!
164
168
match * self {
165
- Assign | AssignOp ( _) => Fixity :: Right ,
169
+ ObsoleteInPlace | Assign | AssignOp ( _) => Fixity :: Right ,
166
170
As | Multiply | Divide | Modulus | Add | Subtract | ShiftLeft | ShiftRight | BitAnd |
167
171
BitXor | BitOr | Less | Greater | LessEqual | GreaterEqual | Equal | NotEqual |
168
172
LAnd | LOr | Colon => Fixity :: Left ,
@@ -174,16 +178,16 @@ impl AssocOp {
174
178
use self :: AssocOp :: * ;
175
179
match * self {
176
180
Less | Greater | LessEqual | GreaterEqual | Equal | NotEqual => true ,
177
- Assign | AssignOp ( _) | As | Multiply | Divide | Modulus | Add | Subtract |
178
- ShiftLeft | ShiftRight | BitAnd | BitXor | BitOr | LAnd | LOr |
181
+ ObsoleteInPlace | Assign | AssignOp ( _) | As | Multiply | Divide | Modulus | Add |
182
+ Subtract | ShiftLeft | ShiftRight | BitAnd | BitXor | BitOr | LAnd | LOr |
179
183
DotDot | DotDotEq | Colon => false
180
184
}
181
185
}
182
186
183
187
pub fn is_assign_like ( & self ) -> bool {
184
188
use self :: AssocOp :: * ;
185
189
match * self {
186
- Assign | AssignOp ( _) => true ,
190
+ Assign | AssignOp ( _) | ObsoleteInPlace => true ,
187
191
Less | Greater | LessEqual | GreaterEqual | Equal | NotEqual | As | Multiply | Divide |
188
192
Modulus | Add | Subtract | ShiftLeft | ShiftRight | BitAnd | BitXor | BitOr | LAnd |
189
193
LOr | DotDot | DotDotEq | Colon => false
@@ -211,7 +215,7 @@ impl AssocOp {
211
215
BitOr => Some ( BinOpKind :: BitOr ) ,
212
216
LAnd => Some ( BinOpKind :: And ) ,
213
217
LOr => Some ( BinOpKind :: Or ) ,
214
- Assign | AssignOp ( _) | As | DotDot | DotDotEq | Colon => None
218
+ ObsoleteInPlace | Assign | AssignOp ( _) | As | DotDot | DotDotEq | Colon => None
215
219
}
216
220
}
217
221
}
@@ -238,6 +242,7 @@ pub enum ExprPrecedence {
238
242
239
243
Binary ( BinOpKind ) ,
240
244
245
+ ObsoleteInPlace ,
241
246
Cast ,
242
247
Type ,
243
248
@@ -304,6 +309,7 @@ impl ExprPrecedence {
304
309
305
310
// Binop-like expr kinds, handled by `AssocOp`.
306
311
ExprPrecedence :: Binary ( op) => AssocOp :: from_ast_binop ( op) . precedence ( ) as i8 ,
312
+ ExprPrecedence :: ObsoleteInPlace => AssocOp :: ObsoleteInPlace . precedence ( ) as i8 ,
307
313
ExprPrecedence :: Cast => AssocOp :: As . precedence ( ) as i8 ,
308
314
ExprPrecedence :: Type => AssocOp :: Colon . precedence ( ) as i8 ,
309
315
0 commit comments