@@ -80,15 +80,16 @@ impl<'a> DefCollector<'a> {
8080 }
8181
8282 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+
8388 if field. is_placeholder {
89+ self . definitions . set_placeholder_field_index ( field. id , index ( self ) ) ;
8490 self . visit_macro_invoc ( field. id ) ;
8591 } 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 ) ;
9293 let def = self . create_def ( field. id , DefPathData :: ValueNs ( name) , field. span ) ;
9394 self . with_parent ( def, |this| visit:: walk_struct_field ( this, field) ) ;
9495 }
@@ -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 . set_placeholder_field_index ( field. id , index) ;
195- }
196194 }
197195 }
198196
0 commit comments