@@ -75,15 +75,16 @@ impl<'a> DefCollector<'a> {
75
75
}
76
76
77
77
fn collect_field ( & mut self , field : & ' a StructField , index : Option < usize > ) {
78
+ let index = |this : & Self | index. unwrap_or_else ( || {
79
+ let node_id = NodeId :: placeholder_from_expn_id ( this. expansion ) ;
80
+ this. definitions . placeholder_field_index ( node_id)
81
+ } ) ;
82
+
78
83
if field. is_placeholder {
84
+ self . definitions . set_placeholder_field_index ( field. id , index ( self ) ) ;
79
85
self . visit_macro_invoc ( field. id ) ;
80
86
} else {
81
- let name = field. ident . map ( |ident| ident. name )
82
- . or_else ( || index. map ( sym:: integer) )
83
- . unwrap_or_else ( || {
84
- let node_id = NodeId :: placeholder_from_expn_id ( self . expansion ) ;
85
- sym:: integer ( self . definitions . placeholder_field_indices [ & node_id] )
86
- } ) ;
87
+ let name = field. ident . map_or_else ( || sym:: integer ( index ( self ) ) , |ident| ident. name ) ;
87
88
let def = self . create_def ( field. id , DefPathData :: ValueNs ( name) , field. span ) ;
88
89
self . with_parent ( def, |this| visit:: walk_struct_field ( this, field) ) ;
89
90
}
@@ -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 . placeholder_field_indices . insert ( field. id , index) ;
195
- }
196
194
}
197
195
}
198
196
0 commit comments