@@ -88,25 +88,24 @@ impl MacroGenerable for Option<P<ast::Expr>> {
88
88
}
89
89
}
90
90
91
- pub fn expand_expr ( e : P < ast:: Expr > , fld : & mut MacroExpander ) -> P < ast:: Expr > {
92
- return e. and_then ( |ast:: Expr { id, node, span, attrs} | match node {
93
-
91
+ pub fn expand_expr ( expr : ast:: Expr , fld : & mut MacroExpander ) -> P < ast:: Expr > {
92
+ match expr. node {
94
93
// expr_mac should really be expr_ext or something; it's the
95
94
// entry-point for all syntax extensions.
96
95
ast:: ExprKind :: Mac ( mac) => {
97
- expand_mac_invoc ( mac, None , attrs. into_attr_vec ( ) , span, fld)
96
+ expand_mac_invoc ( mac, None , expr . attrs . into_attr_vec ( ) , expr . span , fld)
98
97
}
99
98
100
99
ast:: ExprKind :: While ( cond, body, opt_ident) => {
101
100
let cond = fld. fold_expr ( cond) ;
102
101
let ( body, opt_ident) = expand_loop_block ( body, opt_ident, fld) ;
103
- fld. cx . expr ( span, ast:: ExprKind :: While ( cond, body, opt_ident) )
104
- . with_attrs ( fold_thin_attrs ( attrs, fld) )
102
+ fld. cx . expr ( expr . span , ast:: ExprKind :: While ( cond, body, opt_ident) )
103
+ . with_attrs ( fold_thin_attrs ( expr . attrs , fld) )
105
104
}
106
105
107
- ast:: ExprKind :: WhileLet ( pat, expr , body, opt_ident) => {
106
+ ast:: ExprKind :: WhileLet ( pat, cond , body, opt_ident) => {
108
107
let pat = fld. fold_pat ( pat) ;
109
- let expr = fld. fold_expr ( expr ) ;
108
+ let cond = fld. fold_expr ( cond ) ;
110
109
111
110
// Hygienic renaming of the body.
112
111
let ( ( body, opt_ident) , mut rewritten_pats) =
@@ -118,14 +117,14 @@ pub fn expand_expr(e: P<ast::Expr>, fld: &mut MacroExpander) -> P<ast::Expr> {
118
117
} ) ;
119
118
assert ! ( rewritten_pats. len( ) == 1 ) ;
120
119
121
- let wl = ast:: ExprKind :: WhileLet ( rewritten_pats. remove ( 0 ) , expr , body, opt_ident) ;
122
- fld. cx . expr ( span, wl) . with_attrs ( fold_thin_attrs ( attrs, fld) )
120
+ let wl = ast:: ExprKind :: WhileLet ( rewritten_pats. remove ( 0 ) , cond , body, opt_ident) ;
121
+ fld. cx . expr ( expr . span , wl) . with_attrs ( fold_thin_attrs ( expr . attrs , fld) )
123
122
}
124
123
125
124
ast:: ExprKind :: Loop ( loop_block, opt_ident) => {
126
125
let ( loop_block, opt_ident) = expand_loop_block ( loop_block, opt_ident, fld) ;
127
- fld. cx . expr ( span, ast:: ExprKind :: Loop ( loop_block, opt_ident) )
128
- . with_attrs ( fold_thin_attrs ( attrs, fld) )
126
+ fld. cx . expr ( expr . span , ast:: ExprKind :: Loop ( loop_block, opt_ident) )
127
+ . with_attrs ( fold_thin_attrs ( expr . attrs , fld) )
129
128
}
130
129
131
130
ast:: ExprKind :: ForLoop ( pat, head, body, opt_ident) => {
@@ -143,7 +142,7 @@ pub fn expand_expr(e: P<ast::Expr>, fld: &mut MacroExpander) -> P<ast::Expr> {
143
142
144
143
let head = fld. fold_expr ( head) ;
145
144
let fl = ast:: ExprKind :: ForLoop ( rewritten_pats. remove ( 0 ) , head, body, opt_ident) ;
146
- fld. cx . expr ( span, fl) . with_attrs ( fold_thin_attrs ( attrs, fld) )
145
+ fld. cx . expr ( expr . span , fl) . with_attrs ( fold_thin_attrs ( expr . attrs , fld) )
147
146
}
148
147
149
148
ast:: ExprKind :: IfLet ( pat, sub_expr, body, else_opt) => {
@@ -162,7 +161,7 @@ pub fn expand_expr(e: P<ast::Expr>, fld: &mut MacroExpander) -> P<ast::Expr> {
162
161
let else_opt = else_opt. map ( |else_opt| fld. fold_expr ( else_opt) ) ;
163
162
let sub_expr = fld. fold_expr ( sub_expr) ;
164
163
let il = ast:: ExprKind :: IfLet ( rewritten_pats. remove ( 0 ) , sub_expr, body, else_opt) ;
165
- fld. cx . expr ( span, il) . with_attrs ( fold_thin_attrs ( attrs, fld) )
164
+ fld. cx . expr ( expr . span , il) . with_attrs ( fold_thin_attrs ( expr . attrs , fld) )
166
165
}
167
166
168
167
ast:: ExprKind :: Closure ( capture_clause, fn_decl, block, fn_decl_span) => {
@@ -172,21 +171,14 @@ pub fn expand_expr(e: P<ast::Expr>, fld: &mut MacroExpander) -> P<ast::Expr> {
172
171
rewritten_fn_decl,
173
172
rewritten_block,
174
173
fn_decl_span) ;
175
- P ( ast:: Expr { id : id,
174
+ P ( ast:: Expr { id : expr . id ,
176
175
node : new_node,
177
- span : span,
178
- attrs : fold_thin_attrs ( attrs, fld) } )
176
+ span : expr . span ,
177
+ attrs : fold_thin_attrs ( expr . attrs , fld) } )
179
178
}
180
179
181
- _ => {
182
- P ( noop_fold_expr ( ast:: Expr {
183
- id : id,
184
- node : node,
185
- span : span,
186
- attrs : attrs
187
- } , fld) )
188
- }
189
- } ) ;
180
+ _ => P ( noop_fold_expr ( expr, fld) ) ,
181
+ }
190
182
}
191
183
192
184
/// Expand a macro invocation. Returns the result of expansion.
@@ -1015,19 +1007,14 @@ impl<'a, 'b> Folder for MacroExpander<'a, 'b> {
1015
1007
}
1016
1008
1017
1009
fn fold_expr ( & mut self , expr : P < ast:: Expr > ) -> P < ast:: Expr > {
1018
- expand_expr ( expr, self )
1010
+ expr . and_then ( |expr| expand_expr ( expr, self ) )
1019
1011
}
1020
1012
1021
1013
fn fold_opt_expr ( & mut self , expr : P < ast:: Expr > ) -> Option < P < ast:: Expr > > {
1022
- match expr. node {
1023
- ast:: ExprKind :: Mac ( _) => { }
1024
- _ => return Some ( expand_expr ( expr, self ) ) ,
1025
- }
1026
-
1027
- expr. and_then ( |ast:: Expr { node, span, attrs, ..} | match node {
1014
+ expr. and_then ( |expr| match expr. node {
1028
1015
ast:: ExprKind :: Mac ( mac) =>
1029
- expand_mac_invoc ( mac, None , attrs. into_attr_vec ( ) , span, self ) ,
1030
- _ => unreachable ! ( ) ,
1016
+ expand_mac_invoc ( mac, None , expr . attrs . into_attr_vec ( ) , expr . span , self ) ,
1017
+ _ => Some ( expand_expr ( expr , self ) ) ,
1031
1018
} )
1032
1019
}
1033
1020
0 commit comments