@@ -3,7 +3,10 @@ use rustc_feature::{AttributeTemplate, template};
3
3
use rustc_session:: parse:: feature_err;
4
4
use rustc_span:: { Span , Symbol , sym} ;
5
5
6
- use super :: { AcceptMapping , AttributeOrder , AttributeParser , OnDuplicate , SingleAttributeParser } ;
6
+ use super :: {
7
+ AcceptMapping , AttributeOrder , AttributeParser , NoArgsAttributeParser , OnDuplicate ,
8
+ SingleAttributeParser ,
9
+ } ;
7
10
use crate :: context:: { AcceptContext , FinalizeContext , Stage } ;
8
11
use crate :: parser:: ArgParser ;
9
12
use crate :: session_diagnostics:: { NakedFunctionIncompatibleAttribute , NullOnExport } ;
@@ -43,20 +46,10 @@ impl<S: Stage> SingleAttributeParser<S> for OptimizeParser {
43
46
44
47
pub ( crate ) struct ColdParser ;
45
48
46
- impl < S : Stage > SingleAttributeParser < S > for ColdParser {
49
+ impl < S : Stage > NoArgsAttributeParser < S > for ColdParser {
47
50
const PATH : & [ Symbol ] = & [ sym:: cold] ;
48
- const ATTRIBUTE_ORDER : AttributeOrder = AttributeOrder :: KeepLast ;
49
51
const ON_DUPLICATE : OnDuplicate < S > = OnDuplicate :: Warn ;
50
- const TEMPLATE : AttributeTemplate = template ! ( Word ) ;
51
-
52
- fn convert ( cx : & mut AcceptContext < ' _ , ' _ , S > , args : & ArgParser < ' _ > ) -> Option < AttributeKind > {
53
- if let Err ( span) = args. no_args ( ) {
54
- cx. expected_no_args ( span) ;
55
- return None ;
56
- }
57
-
58
- Some ( AttributeKind :: Cold ( cx. attr_span ) )
59
- }
52
+ const CREATE : fn ( Span ) -> AttributeKind = AttributeKind :: Cold ;
60
53
}
61
54
62
55
pub ( crate ) struct ExportNameParser ;
@@ -194,39 +187,17 @@ impl<S: Stage> AttributeParser<S> for NakedParser {
194
187
}
195
188
196
189
pub ( crate ) struct TrackCallerParser ;
197
-
198
- impl < S : Stage > SingleAttributeParser < S > for TrackCallerParser {
190
+ impl < S : Stage > NoArgsAttributeParser < S > for TrackCallerParser {
199
191
const PATH : & [ Symbol ] = & [ sym:: track_caller] ;
200
- const ATTRIBUTE_ORDER : AttributeOrder = AttributeOrder :: KeepLast ;
201
192
const ON_DUPLICATE : OnDuplicate < S > = OnDuplicate :: Warn ;
202
- const TEMPLATE : AttributeTemplate = template ! ( Word ) ;
203
-
204
- fn convert ( cx : & mut AcceptContext < ' _ , ' _ , S > , args : & ArgParser < ' _ > ) -> Option < AttributeKind > {
205
- if let Err ( span) = args. no_args ( ) {
206
- cx. expected_no_args ( span) ;
207
- return None ;
208
- }
209
-
210
- Some ( AttributeKind :: TrackCaller ( cx. attr_span ) )
211
- }
193
+ const CREATE : fn ( Span ) -> AttributeKind = AttributeKind :: TrackCaller ;
212
194
}
213
195
214
196
pub ( crate ) struct NoMangleParser ;
215
-
216
- impl < S : Stage > SingleAttributeParser < S > for NoMangleParser {
217
- const PATH : & [ rustc_span:: Symbol ] = & [ sym:: no_mangle] ;
218
- const ATTRIBUTE_ORDER : AttributeOrder = AttributeOrder :: KeepLast ;
197
+ impl < S : Stage > NoArgsAttributeParser < S > for NoMangleParser {
198
+ const PATH : & [ Symbol ] = & [ sym:: no_mangle] ;
219
199
const ON_DUPLICATE : OnDuplicate < S > = OnDuplicate :: Warn ;
220
- const TEMPLATE : AttributeTemplate = template ! ( Word ) ;
221
-
222
- fn convert ( cx : & mut AcceptContext < ' _ , ' _ , S > , args : & ArgParser < ' _ > ) -> Option < AttributeKind > {
223
- if let Err ( span) = args. no_args ( ) {
224
- cx. expected_no_args ( span) ;
225
- return None ;
226
- }
227
-
228
- Some ( AttributeKind :: NoMangle ( cx. attr_span ) )
229
- }
200
+ const CREATE : fn ( Span ) -> AttributeKind = AttributeKind :: NoMangle ;
230
201
}
231
202
232
203
#[ derive( Default ) ]
0 commit comments