@@ -75,15 +75,16 @@ impl<'a> DefCollector<'a> {
7575 }
7676
7777 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+
7883 if field. is_placeholder {
84+ self . definitions . set_placeholder_field_index ( field. id , index ( self ) ) ;
7985 self . visit_macro_invoc ( field. id ) ;
8086 } 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 ) ;
8788 let def = self . create_def ( field. id , DefPathData :: ValueNs ( name) , field. span ) ;
8889 self . with_parent ( def, |this| visit:: walk_struct_field ( this, field) ) ;
8990 }
@@ -190,9 +191,6 @@ impl<'a> visit::Visitor<'a> for DefCollector<'a> {
190191 // and every such attribute expands into a single field after it's resolved.
191192 for ( index, field) in data. fields ( ) . iter ( ) . enumerate ( ) {
192193 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- }
196194 }
197195 }
198196
0 commit comments