@@ -68,20 +68,23 @@ macro_rules! ast_fragments {
6868 /// Can also serve as an input and intermediate result for macro expansion operations.
6969 pub enum AstFragment {
7070 OptExpr ( Option <Box <ast:: Expr >>) ,
71+ MethodReceiverExpr ( Box <ast:: Expr >) ,
7172 $( $Kind( $AstTy) , ) *
7273 }
7374
7475 /// "Discriminant" of an AST fragment.
7576 #[ derive( Copy , Clone , Debug , PartialEq , Eq ) ]
7677 pub enum AstFragmentKind {
7778 OptExpr ,
79+ MethodReceiverExpr ,
7880 $( $Kind, ) *
7981 }
8082
8183 impl AstFragmentKind {
8284 pub fn name( self ) -> & ' static str {
8385 match self {
8486 AstFragmentKind :: OptExpr => "expression" ,
87+ AstFragmentKind :: MethodReceiverExpr => "expression" ,
8588 $( AstFragmentKind :: $Kind => $kind_name, ) *
8689 }
8790 }
@@ -90,6 +93,8 @@ macro_rules! ast_fragments {
9093 match self {
9194 AstFragmentKind :: OptExpr =>
9295 result. make_expr( ) . map( Some ) . map( AstFragment :: OptExpr ) ,
96+ AstFragmentKind :: MethodReceiverExpr =>
97+ result. make_expr( ) . map( AstFragment :: MethodReceiverExpr ) ,
9398 $( AstFragmentKind :: $Kind => result. $make_ast( ) . map( AstFragment :: $Kind) , ) *
9499 }
95100 }
@@ -116,6 +121,13 @@ macro_rules! ast_fragments {
116121 }
117122 }
118123
124+ pub ( crate ) fn make_method_receiver_expr( self ) -> Box <ast:: Expr > {
125+ match self {
126+ AstFragment :: MethodReceiverExpr ( expr) => expr,
127+ _ => panic!( "AstFragment::make_method_receiver_expr called on the wrong kind of fragment" ) ,
128+ }
129+ }
130+
119131 $( pub fn $make_ast( self ) -> $AstTy {
120132 match self {
121133 AstFragment :: $Kind( ast) => ast,
@@ -134,6 +146,7 @@ macro_rules! ast_fragments {
134146 * opt_expr = vis. filter_map_expr( expr)
135147 }
136148 }
149+ AstFragment :: MethodReceiverExpr ( expr) => vis. visit_method_receiver_expr( expr) ,
137150 $( $( AstFragment :: $Kind( ast) => vis. $visit_ast( ast) , ) ?) *
138151 $( $( AstFragment :: $Kind( ast) =>
139152 ast. flat_map_in_place( |ast| vis. $flat_map_ast_elt( ast, $( $args) * ) ) , ) ?) *
@@ -144,6 +157,7 @@ macro_rules! ast_fragments {
144157 match self {
145158 AstFragment :: OptExpr ( Some ( expr) ) => try_visit!( visitor. visit_expr( expr) ) ,
146159 AstFragment :: OptExpr ( None ) => { }
160+ AstFragment :: MethodReceiverExpr ( expr) => try_visit!( visitor. visit_method_receiver_expr( expr) ) ,
147161 $( $( AstFragment :: $Kind( ast) => try_visit!( visitor. $visit_ast( ast) ) , ) ?) *
148162 $( $( AstFragment :: $Kind( ast) => walk_list!( visitor, $visit_ast_elt, & ast[ ..] , $( $args) * ) , ) ?) *
149163 }
@@ -166,11 +180,6 @@ ast_fragments! {
166180 one fn visit_expr;
167181 fn make_expr;
168182 }
169- MethodReceiverExpr ( Box <ast:: Expr >) {
170- "expression" ;
171- one fn visit_method_receiver_expr;
172- fn make_method_receiver_expr;
173- }
174183 Pat ( Box <ast:: Pat >) {
175184 "pattern" ;
176185 one fn visit_pat;
0 commit comments