@@ -80,15 +80,16 @@ impl<'a> DefCollector<'a> {
80
80
}
81
81
82
82
fn collect_field ( & mut self , field : & ' a StructField , index : Option < usize > ) {
83
+ let index = |this : & Self | index. unwrap_or_else ( || {
84
+ let node_id = NodeId :: placeholder_from_expn_id ( this. expansion ) ;
85
+ this. definitions . placeholder_field_index ( node_id)
86
+ } ) ;
87
+
83
88
if field. is_placeholder {
89
+ self . definitions . set_placeholder_field_index ( field. id , index ( self ) ) ;
84
90
self . visit_macro_invoc ( field. id ) ;
85
91
} else {
86
- let name = field. ident . map ( |ident| ident. name )
87
- . or_else ( || index. map ( sym:: integer) )
88
- . unwrap_or_else ( || {
89
- let node_id = NodeId :: placeholder_from_expn_id ( self . expansion ) ;
90
- sym:: integer ( self . definitions . placeholder_field_index ( node_id) )
91
- } ) ;
92
+ let name = field. ident . map_or_else ( || sym:: integer ( index ( self ) ) , |ident| ident. name ) ;
92
93
let def = self . create_def ( field. id , DefPathData :: ValueNs ( name) , field. span ) ;
93
94
self . with_parent ( def, |this| visit:: walk_struct_field ( this, field) ) ;
94
95
}
@@ -190,9 +191,6 @@ impl<'a> visit::Visitor<'a> for DefCollector<'a> {
190
191
// and every such attribute expands into a single field after it's resolved.
191
192
for ( index, field) in data. fields ( ) . iter ( ) . enumerate ( ) {
192
193
self . collect_field ( field, Some ( index) ) ;
193
- if field. is_placeholder && field. ident . is_none ( ) {
194
- self . definitions . set_placeholder_field_index ( field. id , index) ;
195
- }
196
194
}
197
195
}
198
196
0 commit comments