@@ -63,8 +63,14 @@ fn eii_(
63
63
64
64
let item = item. into_inner ( ) ;
65
65
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
68
74
else {
69
75
ecx. dcx ( )
70
76
. emit_err ( EIIMacroExpectedFunction { span, name : path_to_string ( & meta_item. path ) } ) ;
@@ -105,8 +111,8 @@ fn eii_(
105
111
id : ast:: DUMMY_NODE_ID ,
106
112
span,
107
113
vis : ast:: Visibility { span, kind : ast:: VisibilityKind :: Inherited , tokens : None } ,
108
- ident : Ident { name : kw:: Underscore , span } ,
109
114
kind : ast:: ItemKind :: Const ( Box :: new ( ast:: ConstItem {
115
+ ident : Ident { name : kw:: Underscore , span } ,
110
116
defaultness : ast:: Defaultness :: Final ,
111
117
generics : ast:: Generics :: default ( ) ,
112
118
ty : P ( ast:: Ty {
@@ -130,7 +136,6 @@ fn eii_(
130
136
kind: ast:: VisibilityKind :: Inherited ,
131
137
tokens: None
132
138
} ,
133
- ident: item_name,
134
139
kind: ItemKind :: Fn ( default_func) ,
135
140
tokens: None ,
136
141
} ) ) ,
@@ -140,14 +145,14 @@ fn eii_(
140
145
rules : ast:: BlockCheckMode :: Default ,
141
146
span,
142
147
tokens : None ,
143
- could_be_bare_literal : false ,
144
148
} ) ,
145
149
None ,
146
150
) ,
147
151
span,
148
152
attrs : ThinVec :: new ( ) ,
149
153
tokens : None ,
150
154
} ) ) ,
155
+ define_opaque : None ,
151
156
} ) ) ,
152
157
tokens : None ,
153
158
} ) ) )
@@ -179,6 +184,21 @@ fn eii_(
179
184
}
180
185
181
186
// 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
+ } ) ;
182
202
let extern_block = Annotatable :: Item ( P ( ast:: Item {
183
203
attrs : ast:: AttrVec :: default ( ) ,
184
204
id : ast:: DUMMY_NODE_ID ,
@@ -258,6 +278,7 @@ fn eii_(
258
278
eii_macro_for : Some ( ast:: EIIMacroFor {
259
279
extern_item_path : ast:: Path :: from_ident ( func. ident ) ,
260
280
impl_unsafe,
281
+ span : decl_span,
261
282
} ) ,
262
283
} ,
263
284
) ,
@@ -317,7 +338,7 @@ pub(crate) fn eii_macro_for(
317
338
false
318
339
} ;
319
340
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 } ) ;
321
342
322
343
// Return the original item and the new methods.
323
344
vec ! [ item]
0 commit comments