@@ -2536,7 +2536,7 @@ impl<'a> Parser<'a> {
25362536 }
25372537
25382538 // expr[...]
2539- // An index expression.
2539+ // Could be either an index expression or a slicing expression.
25402540 token:: OpenDelim ( token:: Bracket ) => {
25412541 let bracket_pos = self . span . lo ;
25422542 self . bump ( ) ;
@@ -2576,22 +2576,6 @@ impl<'a> Parser<'a> {
25762576 "use `&expr[]` to construct a slice of the whole of expr" ) ;
25772577 }
25782578 }
2579-
2580- // A range expression, either `expr..expr` or `expr..`.
2581- token:: DotDot if !self . restrictions . contains ( RESTRICTION_NO_DOTS ) => {
2582- self . bump ( ) ;
2583-
2584- let opt_end = if self . token . can_begin_expr ( ) {
2585- let end = self . parse_expr_res ( RESTRICTION_NO_DOTS ) ;
2586- Some ( end)
2587- } else {
2588- None
2589- } ;
2590-
2591- let hi = self . span . hi ;
2592- let range = self . mk_range ( Some ( e) , opt_end) ;
2593- return self . mk_expr ( lo, hi, range) ;
2594- }
25952579 _ => return e
25962580 }
25972581 }
@@ -2834,7 +2818,7 @@ impl<'a> Parser<'a> {
28342818 token:: DotDot if !self . restrictions . contains ( RESTRICTION_NO_DOTS ) => {
28352819 // A range, closed above: `..expr`.
28362820 self . bump ( ) ;
2837- let e = self . parse_prefix_expr ( ) ;
2821+ let e = self . parse_expr ( ) ;
28382822 hi = e. span . hi ;
28392823 ex = self . mk_range ( None , Some ( e) ) ;
28402824 }
@@ -2901,6 +2885,7 @@ impl<'a> Parser<'a> {
29012885 self . restrictions . contains ( RESTRICTION_NO_BAR_OP ) {
29022886 return lhs;
29032887 }
2888+
29042889 self . expected_tokens . push ( TokenType :: Operator ) ;
29052890
29062891 let cur_opt = self . token . to_binop ( ) ;
@@ -2909,6 +2894,7 @@ impl<'a> Parser<'a> {
29092894 let cur_prec = operator_prec ( cur_op) ;
29102895 if cur_prec > min_prec {
29112896 self . bump ( ) ;
2897+ // TODO
29122898 let expr = self . parse_prefix_expr ( ) ;
29132899 let rhs = self . parse_more_binops ( expr, cur_prec) ;
29142900 let lhs_span = lhs. span ;
@@ -2970,6 +2956,25 @@ impl<'a> Parser<'a> {
29702956 let assign_op = self . mk_assign_op ( aop, lhs, rhs) ;
29712957 self . mk_expr ( span. lo , rhs_span. hi , assign_op)
29722958 }
2959+ // TODO
2960+ // A range expression, either `expr..expr` or `expr..`.
2961+ token:: DotDot if !self . restrictions . contains ( RESTRICTION_NO_DOTS ) => {
2962+ self . bump ( ) ;
2963+
2964+ let opt_end = if self . token . can_begin_expr ( ) {
2965+ // TODO only use of RES...DOT
2966+ let end = self . parse_expr_res ( RESTRICTION_NO_DOTS ) ;
2967+ Some ( end)
2968+ } else {
2969+ None
2970+ } ;
2971+
2972+ let lo = lhs. span . lo ;
2973+ let hi = self . span . hi ;
2974+ let range = self . mk_range ( Some ( lhs) , opt_end) ;
2975+ return self . mk_expr ( lo, hi, range) ;
2976+ }
2977+
29732978 _ => {
29742979 lhs
29752980 }
0 commit comments