@@ -2146,14 +2146,14 @@ impl<'a> Parser<'a> {
2146
2146
( & None , & Some ( ref e) ) => ( e. span . lo , e. span . hi ) ,
2147
2147
( & None , & None ) => ( DUMMY_SP . lo , DUMMY_SP . hi ) ,
2148
2148
} ;
2149
- ExprIndex ( expr, self . mk_expr ( lo, hi, ExprRange ( start, end) ) )
2149
+ ExprIndex ( expr, self . mk_expr ( lo, hi, self . mk_range ( start, end) ) )
2150
2150
}
2151
2151
2152
2152
pub fn mk_range ( & mut self ,
2153
- start : P < Expr > ,
2153
+ start : Option < P < Expr > > ,
2154
2154
end : Option < P < Expr > > )
2155
2155
-> ast:: Expr_ {
2156
- ExprRange ( Some ( start) , end)
2156
+ ExprRange ( start, end)
2157
2157
}
2158
2158
2159
2159
pub fn mk_field ( & mut self , expr : P < Expr > , ident : ast:: SpannedIdent ) -> ast:: Expr_ {
@@ -2676,7 +2676,7 @@ impl<'a> Parser<'a> {
2676
2676
} ;
2677
2677
2678
2678
let hi = self . span . hi ;
2679
- let range = self . mk_range ( e , opt_end) ;
2679
+ let range = self . mk_range ( Some ( e ) , opt_end) ;
2680
2680
return self . mk_expr ( lo, hi, range) ;
2681
2681
}
2682
2682
_ => return e
@@ -2889,6 +2889,13 @@ impl<'a> Parser<'a> {
2889
2889
hi = e. span . hi ;
2890
2890
ex = self . mk_unary ( UnUniq , e) ;
2891
2891
}
2892
+ token:: DotDot if !self . restrictions . contains ( RESTRICTION_NO_DOTS ) => {
2893
+ // A range, closed above: `..expr`.
2894
+ self . bump ( ) ;
2895
+ let e = self . parse_prefix_expr ( ) ;
2896
+ hi = e. span . hi ;
2897
+ ex = self . mk_range ( None , Some ( e) ) ;
2898
+ }
2892
2899
token:: Ident ( _, _) => {
2893
2900
if !self . token . is_keyword ( keywords:: Box ) {
2894
2901
return self . parse_dot_or_call_expr ( ) ;
0 commit comments