@@ -63,8 +63,14 @@ fn eii_(
6363
6464 let item = item. into_inner ( ) ;
6565
66- let ast:: Item { attrs, id : _, span : item_span, vis, kind : ItemKind :: Fn ( mut func) , tokens : _ } =
67- item
66+ let ast:: Item {
67+ mut attrs,
68+ id : _,
69+ span : item_span,
70+ vis,
71+ kind : ItemKind :: Fn ( mut func) ,
72+ tokens : _,
73+ } = item
6874 else {
6975 ecx. dcx ( )
7076 . emit_err ( EIIMacroExpectedFunction { span, name : path_to_string ( & meta_item. path ) } ) ;
@@ -105,8 +111,8 @@ fn eii_(
105111 id : ast:: DUMMY_NODE_ID ,
106112 span,
107113 vis : ast:: Visibility { span, kind : ast:: VisibilityKind :: Inherited , tokens : None } ,
108- ident : Ident { name : kw:: Underscore , span } ,
109114 kind : ast:: ItemKind :: Const ( Box :: new ( ast:: ConstItem {
115+ ident : Ident { name : kw:: Underscore , span } ,
110116 defaultness : ast:: Defaultness :: Final ,
111117 generics : ast:: Generics :: default ( ) ,
112118 ty : P ( ast:: Ty {
@@ -130,7 +136,6 @@ fn eii_(
130136 kind: ast:: VisibilityKind :: Inherited ,
131137 tokens: None
132138 } ,
133- ident: item_name,
134139 kind: ItemKind :: Fn ( default_func) ,
135140 tokens: None ,
136141 } ) ) ,
@@ -140,14 +145,14 @@ fn eii_(
140145 rules : ast:: BlockCheckMode :: Default ,
141146 span,
142147 tokens : None ,
143- could_be_bare_literal : false ,
144148 } ) ,
145149 None ,
146150 ) ,
147151 span,
148152 attrs : ThinVec :: new ( ) ,
149153 tokens : None ,
150154 } ) ) ,
155+ define_opaque : None ,
151156 } ) ) ,
152157 tokens : None ,
153158 } ) ) )
@@ -179,6 +184,21 @@ fn eii_(
179184 }
180185
181186 // extern "…" { safe fn item(); }
187+ // #[eii_mangle_extern]
188+ attrs. push ( ast:: Attribute {
189+ kind : ast:: AttrKind :: Normal ( P ( ast:: NormalAttr {
190+ item : ast:: AttrItem {
191+ unsafety : ast:: Safety :: Default ,
192+ path : ast:: Path :: from_ident ( Ident :: new ( sym:: eii_mangle_extern, span) ) ,
193+ args : ast:: AttrArgs :: Empty ,
194+ tokens : None ,
195+ } ,
196+ tokens : None ,
197+ } ) ) ,
198+ id : ecx. sess . psess . attr_id_generator . mk_attr_id ( ) ,
199+ style : ast:: AttrStyle :: Outer ,
200+ span,
201+ } ) ;
182202 let extern_block = Annotatable :: Item ( P ( ast:: Item {
183203 attrs : ast:: AttrVec :: default ( ) ,
184204 id : ast:: DUMMY_NODE_ID ,
@@ -258,6 +278,7 @@ fn eii_(
258278 eii_macro_for : Some ( ast:: EIIMacroFor {
259279 extern_item_path : ast:: Path :: from_ident ( func. ident ) ,
260280 impl_unsafe,
281+ span : decl_span,
261282 } ) ,
262283 } ,
263284 ) ,
@@ -317,7 +338,7 @@ pub(crate) fn eii_macro_for(
317338 false
318339 } ;
319340
320- d. eii_macro_for = Some ( EIIMacroFor { extern_item_path, impl_unsafe } ) ;
341+ d. eii_macro_for = Some ( EIIMacroFor { extern_item_path, impl_unsafe, span } ) ;
321342
322343 // Return the original item and the new methods.
323344 vec ! [ item]
0 commit comments