@@ -43,7 +43,7 @@ use ast::{MutImmutable, MutMutable, mac_, mac_invoc_tt, matcher, match_nontermin
43
43
use ast:: { match_seq, match_tok, method, mt, BiMul , Mutability } ;
44
44
use ast:: { named_field, UnNeg , noreturn, UnNot , Pat , PatBox , PatEnum } ;
45
45
use ast:: { PatIdent , PatLit , PatRange , PatRegion , PatStruct } ;
46
- use ast:: { PatTup , PatUniq , PatWild , private} ;
46
+ use ast:: { PatTup , PatUniq , PatWild , PatWildMulti , private} ;
47
47
use ast:: { BiRem , required} ;
48
48
use ast:: { ret_style, return_val, BiShl , BiShr , Stmt , StmtDecl } ;
49
49
use ast:: { StmtExpr , StmtSemi , StmtMac , struct_def, struct_field} ;
@@ -2724,17 +2724,35 @@ impl Parser {
2724
2724
}
2725
2725
}
2726
2726
2727
- let subpat = self . parse_pat ( ) ;
2728
2727
if is_slice {
2729
- match subpat {
2730
- @ast:: Pat { node : PatWild , _ } => ( ) ,
2731
- @ast:: Pat { node : PatIdent ( _, _, _) , _ } => ( ) ,
2732
- @ast:: Pat { span, _ } => self . span_fatal (
2733
- span, "expected an identifier or `_`"
2734
- )
2728
+ if * self . token == token:: COMMA || * self . token == token:: RBRACKET {
2729
+ slice = Some ( @ast:: Pat {
2730
+ id : ast:: DUMMY_NODE_ID ,
2731
+ node : PatWildMulti ,
2732
+ span : * self . span ,
2733
+ } )
2734
+ } else {
2735
+ let subpat = self . parse_pat ( ) ;
2736
+ match subpat {
2737
+ @ast:: Pat { id, node : PatWild , span } => {
2738
+ // NOTE #5830 activate after snapshot
2739
+ // self.obsolete(*self.span, ObsoleteVecDotDotWildcard);
2740
+ slice = Some ( @ast:: Pat {
2741
+ id : id,
2742
+ node : PatWildMulti ,
2743
+ span : span
2744
+ } )
2745
+ } ,
2746
+ @ast:: Pat { node : PatIdent ( _, _, _) , _ } => {
2747
+ slice = Some ( subpat) ;
2748
+ }
2749
+ @ast:: Pat { span, _ } => self . span_fatal (
2750
+ span, "expected an identifier or nothing"
2751
+ )
2752
+ }
2735
2753
}
2736
- slice = Some ( subpat) ;
2737
2754
} else {
2755
+ let subpat = self . parse_pat ( ) ;
2738
2756
if before_slice {
2739
2757
before. push ( subpat) ;
2740
2758
} else {
@@ -2757,7 +2775,7 @@ impl Parser {
2757
2775
2758
2776
etc = * self . token == token:: UNDERSCORE || * self . token == token:: DOTDOT ;
2759
2777
if * self . token == token:: UNDERSCORE {
2760
- // FIXME #5830 activate after snapshot
2778
+ // NOTE #5830 activate after snapshot
2761
2779
// self.obsolete(*self.span, ObsoleteStructWildcard);
2762
2780
}
2763
2781
if etc {
@@ -3031,7 +3049,7 @@ impl Parser {
3031
3049
// This is a "top constructor only" pat
3032
3050
self . bump ( ) ;
3033
3051
if is_star {
3034
- // FIXME #5830 activate after snapshot
3052
+ // NOTE #5830 activate after snapshot
3035
3053
// self.obsolete(*self.span, ObsoleteEnumWildcard);
3036
3054
}
3037
3055
self . bump ( ) ;
0 commit comments