@@ -44,8 +44,10 @@ macro_rules! ast_fragments {
44
44
(
45
45
$( $Kind: ident( $AstTy: ty) {
46
46
$kind_name: expr;
47
- $( one fn $fold_ast: ident; fn $visit_ast: ident; ) ?
48
- $( many fn $fold_ast_elt: ident; fn $visit_ast_elt: ident; ) ?
47
+ // FIXME: HACK: this should be `$(one ...)?` and `$(many ...)?` but `?` macro
48
+ // repetition was removed from 2015 edition in #51587 because of ambiguities.
49
+ $( one fn $fold_ast: ident; fn $visit_ast: ident; ) *
50
+ $( many fn $fold_ast_elt: ident; fn $visit_ast_elt: ident; ) *
49
51
fn $make_ast: ident;
50
52
} ) *
51
53
) => {
@@ -100,22 +102,22 @@ macro_rules! ast_fragments {
100
102
AstFragment :: OptExpr ( expr) =>
101
103
AstFragment :: OptExpr ( expr. and_then( |expr| folder. fold_opt_expr( expr) ) ) ,
102
104
$( $( AstFragment :: $Kind( ast) =>
103
- AstFragment :: $Kind( folder. $fold_ast( ast) ) , ) ? ) *
105
+ AstFragment :: $Kind( folder. $fold_ast( ast) ) , ) * ) *
104
106
$( $( AstFragment :: $Kind( ast) =>
105
107
AstFragment :: $Kind( ast. into_iter( )
106
108
. flat_map( |ast| folder. $fold_ast_elt( ast) )
107
- . collect( ) ) , ) ? ) *
109
+ . collect( ) ) , ) * ) *
108
110
}
109
111
}
110
112
111
113
pub fn visit_with<' a, V : Visitor <' a>>( & ' a self , visitor: & mut V ) {
112
114
match * self {
113
115
AstFragment :: OptExpr ( Some ( ref expr) ) => visitor. visit_expr( expr) ,
114
116
AstFragment :: OptExpr ( None ) => { }
115
- $( $( AstFragment :: $Kind( ref ast) => visitor. $visit_ast( ast) , ) ? ) *
117
+ $( $( AstFragment :: $Kind( ref ast) => visitor. $visit_ast( ast) , ) * ) *
116
118
$( $( AstFragment :: $Kind( ref ast) => for ast_elt in & ast[ ..] {
117
119
visitor. $visit_ast_elt( ast_elt) ;
118
- } ) ? ) *
120
+ } ) * ) *
119
121
}
120
122
}
121
123
}
@@ -126,10 +128,10 @@ macro_rules! ast_fragments {
126
128
}
127
129
$( $( fn $fold_ast( & mut self , ast: $AstTy) -> $AstTy {
128
130
self . expand_fragment( AstFragment :: $Kind( ast) ) . $make_ast( )
129
- } ) ? ) *
131
+ } ) * ) *
130
132
$( $( fn $fold_ast_elt( & mut self , ast_elt: <$AstTy as IntoIterator >:: Item ) -> $AstTy {
131
133
self . expand_fragment( AstFragment :: $Kind( SmallVector :: one( ast_elt) ) ) . $make_ast( )
132
- } ) ? ) *
134
+ } ) * ) *
133
135
}
134
136
135
137
impl <' a> MacResult for :: ext:: tt:: macro_rules:: ParserAnyMacro <' a> {
0 commit comments