@@ -2536,7 +2536,7 @@ impl<'a> Parser<'a> {
2536
2536
}
2537
2537
2538
2538
// expr[...]
2539
- // An index expression.
2539
+ // Could be either an index expression or a slicing expression.
2540
2540
token:: OpenDelim ( token:: Bracket ) => {
2541
2541
let bracket_pos = self . span . lo ;
2542
2542
self . bump ( ) ;
@@ -2576,22 +2576,6 @@ impl<'a> Parser<'a> {
2576
2576
"use `&expr[]` to construct a slice of the whole of expr" ) ;
2577
2577
}
2578
2578
}
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
- }
2595
2579
_ => return e
2596
2580
}
2597
2581
}
@@ -2834,7 +2818,7 @@ impl<'a> Parser<'a> {
2834
2818
token:: DotDot if !self . restrictions . contains ( RESTRICTION_NO_DOTS ) => {
2835
2819
// A range, closed above: `..expr`.
2836
2820
self . bump ( ) ;
2837
- let e = self . parse_prefix_expr ( ) ;
2821
+ let e = self . parse_expr ( ) ;
2838
2822
hi = e. span . hi ;
2839
2823
ex = self . mk_range ( None , Some ( e) ) ;
2840
2824
}
@@ -2901,6 +2885,7 @@ impl<'a> Parser<'a> {
2901
2885
self . restrictions . contains ( RESTRICTION_NO_BAR_OP ) {
2902
2886
return lhs;
2903
2887
}
2888
+
2904
2889
self . expected_tokens . push ( TokenType :: Operator ) ;
2905
2890
2906
2891
let cur_opt = self . token . to_binop ( ) ;
@@ -2909,6 +2894,7 @@ impl<'a> Parser<'a> {
2909
2894
let cur_prec = operator_prec ( cur_op) ;
2910
2895
if cur_prec > min_prec {
2911
2896
self . bump ( ) ;
2897
+ // TODO
2912
2898
let expr = self . parse_prefix_expr ( ) ;
2913
2899
let rhs = self . parse_more_binops ( expr, cur_prec) ;
2914
2900
let lhs_span = lhs. span ;
@@ -2970,6 +2956,25 @@ impl<'a> Parser<'a> {
2970
2956
let assign_op = self . mk_assign_op ( aop, lhs, rhs) ;
2971
2957
self . mk_expr ( span. lo , rhs_span. hi , assign_op)
2972
2958
}
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
+
2973
2978
_ => {
2974
2979
lhs
2975
2980
}
0 commit comments