@@ -109,175 +109,125 @@ pub enum AbiDisabled {
109
109
Unrecognized ,
110
110
}
111
111
112
- fn gate_feature_post (
112
+ pub fn is_enabled (
113
113
features : & rustc_feature:: Features ,
114
- feature : Symbol ,
115
114
span : Span ,
116
- explain : & ' static str ,
115
+ name : & str ,
117
116
) -> Result < ( ) , AbiDisabled > {
118
- if !features. enabled ( feature) && !span. allows_unstable ( feature) {
119
- Err ( AbiDisabled :: Unstable { feature, explain } )
120
- } else {
121
- Ok ( ( ) )
117
+ let s = is_stable ( name) ;
118
+ if let Err ( AbiDisabled :: Unstable { feature, .. } ) = s {
119
+ if features. enabled ( feature) || span. allows_unstable ( feature) {
120
+ return Ok ( ( ) ) ;
121
+ }
122
122
}
123
+ s
123
124
}
124
125
125
- pub fn is_enabled (
126
- features : & rustc_feature:: Features ,
127
- span : Span ,
128
- name : & str ,
129
- ) -> Result < ( ) , AbiDisabled > {
126
+ pub fn is_stable ( name : & str ) -> Result < ( ) , AbiDisabled > {
130
127
match name {
131
128
// Stable
132
129
"Rust" | "C" | "cdecl" | "stdcall" | "fastcall" | "aapcs" | "win64" | "sysv64"
133
130
| "system" => Ok ( ( ) ) ,
134
- "rust-intrinsic" => {
135
- gate_feature_post ( features, sym:: intrinsics, span, "intrinsics are subject to change" )
136
- }
137
- "platform-intrinsic" => gate_feature_post (
138
- features,
139
- sym:: platform_intrinsics,
140
- span,
141
- "platform intrinsics are experimental and possibly buggy" ,
142
- ) ,
143
- "vectorcall" => gate_feature_post (
144
- features,
145
- sym:: abi_vectorcall,
146
- span,
147
- "vectorcall is experimental and subject to change" ,
148
- ) ,
149
- "thiscall" => gate_feature_post (
150
- features,
151
- sym:: abi_thiscall,
152
- span,
153
- "thiscall is experimental and subject to change" ,
154
- ) ,
155
- "rust-call" => gate_feature_post (
156
- features,
157
- sym:: unboxed_closures,
158
- span,
159
- "rust-call ABI is subject to change" ,
160
- ) ,
161
- "rust-cold" => gate_feature_post (
162
- features,
163
- sym:: rust_cold_cc,
164
- span,
165
- "rust-cold is experimental and subject to change" ,
166
- ) ,
167
- "ptx-kernel" => gate_feature_post (
168
- features,
169
- sym:: abi_ptx,
170
- span,
171
- "PTX ABIs are experimental and subject to change" ,
172
- ) ,
173
- "unadjusted" => gate_feature_post (
174
- features,
175
- sym:: abi_unadjusted,
176
- span,
177
- "unadjusted ABI is an implementation detail and perma-unstable" ,
178
- ) ,
179
- "msp430-interrupt" => gate_feature_post (
180
- features,
181
- sym:: abi_msp430_interrupt,
182
- span,
183
- "msp430-interrupt ABI is experimental and subject to change" ,
184
- ) ,
185
- "x86-interrupt" => gate_feature_post (
186
- features,
187
- sym:: abi_x86_interrupt,
188
- span,
189
- "x86-interrupt ABI is experimental and subject to change" ,
190
- ) ,
191
- "amdgpu-kernel" => gate_feature_post (
192
- features,
193
- sym:: abi_amdgpu_kernel,
194
- span,
195
- "amdgpu-kernel ABI is experimental and subject to change" ,
196
- ) ,
197
- "avr-interrupt" | "avr-non-blocking-interrupt" => gate_feature_post (
198
- features,
199
- sym:: abi_avr_interrupt,
200
- span,
201
- "avr-interrupt and avr-non-blocking-interrupt ABIs are experimental and subject to change" ,
202
- ) ,
203
- "efiapi" => gate_feature_post (
204
- features,
205
- sym:: abi_efiapi,
206
- span,
207
- "efiapi ABI is experimental and subject to change" ,
208
- ) ,
209
- "C-cmse-nonsecure-call" => gate_feature_post (
210
- features,
211
- sym:: abi_c_cmse_nonsecure_call,
212
- span,
213
- "C-cmse-nonsecure-call ABI is experimental and subject to change" ,
214
- ) ,
215
- "C-unwind" => gate_feature_post (
216
- features,
217
- sym:: c_unwind,
218
- span,
219
- "C-unwind ABI is experimental and subject to change" ,
220
- ) ,
221
- "stdcall-unwind" => gate_feature_post (
222
- features,
223
- sym:: c_unwind,
224
- span,
225
- "stdcall-unwind ABI is experimental and subject to change" ,
226
- ) ,
227
- "system-unwind" => gate_feature_post (
228
- features,
229
- sym:: c_unwind,
230
- span,
231
- "system-unwind ABI is experimental and subject to change" ,
232
- ) ,
233
- "thiscall-unwind" => gate_feature_post (
234
- features,
235
- sym:: c_unwind,
236
- span,
237
- "thiscall-unwind ABI is experimental and subject to change" ,
238
- ) ,
239
- "cdecl-unwind" => gate_feature_post (
240
- features,
241
- sym:: c_unwind,
242
- span,
243
- "cdecl-unwind ABI is experimental and subject to change" ,
244
- ) ,
245
- "fastcall-unwind" => gate_feature_post (
246
- features,
247
- sym:: c_unwind,
248
- span,
249
- "fastcall-unwind ABI is experimental and subject to change" ,
250
- ) ,
251
- "vectorcall-unwind" => gate_feature_post (
252
- features,
253
- sym:: c_unwind,
254
- span,
255
- "vectorcall-unwind ABI is experimental and subject to change" ,
256
- ) ,
257
- "aapcs-unwind" => gate_feature_post (
258
- features,
259
- sym:: c_unwind,
260
- span,
261
- "aapcs-unwind ABI is experimental and subject to change" ,
262
- ) ,
263
- "win64-unwind" => gate_feature_post (
264
- features,
265
- sym:: c_unwind,
266
- span,
267
- "win64-unwind ABI is experimental and subject to change" ,
268
- ) ,
269
- "sysv64-unwind" => gate_feature_post (
270
- features,
271
- sym:: c_unwind,
272
- span,
273
- "sysv64-unwind ABI is experimental and subject to change" ,
274
- ) ,
275
- "wasm" => gate_feature_post (
276
- features,
277
- sym:: wasm_abi,
278
- span,
279
- "wasm ABI is experimental and subject to change" ,
280
- ) ,
131
+ "rust-intrinsic" => Err ( AbiDisabled :: Unstable {
132
+ feature : sym:: intrinsics,
133
+ explain : "intrinsics are subject to change" ,
134
+ } ) ,
135
+ "platform-intrinsic" => Err ( AbiDisabled :: Unstable {
136
+ feature : sym:: platform_intrinsics,
137
+ explain : "platform intrinsics are experimental and possibly buggy" ,
138
+ } ) ,
139
+ "vectorcall" => Err ( AbiDisabled :: Unstable {
140
+ feature : sym:: abi_vectorcall,
141
+ explain : "vectorcall is experimental and subject to change" ,
142
+ } ) ,
143
+ "thiscall" => Err ( AbiDisabled :: Unstable {
144
+ feature : sym:: abi_thiscall,
145
+ explain : "thiscall is experimental and subject to change" ,
146
+ } ) ,
147
+ "rust-call" => Err ( AbiDisabled :: Unstable {
148
+ feature : sym:: unboxed_closures,
149
+ explain : "rust-call ABI is subject to change" ,
150
+ } ) ,
151
+ "rust-cold" => Err ( AbiDisabled :: Unstable {
152
+ feature : sym:: rust_cold_cc,
153
+ explain : "rust-cold is experimental and subject to change" ,
154
+ } ) ,
155
+ "ptx-kernel" => Err ( AbiDisabled :: Unstable {
156
+ feature : sym:: abi_ptx,
157
+ explain : "PTX ABIs are experimental and subject to change" ,
158
+ } ) ,
159
+ "unadjusted" => Err ( AbiDisabled :: Unstable {
160
+ feature : sym:: abi_unadjusted,
161
+ explain : "unadjusted ABI is an implementation detail and perma-unstable" ,
162
+ } ) ,
163
+ "msp430-interrupt" => Err ( AbiDisabled :: Unstable {
164
+ feature : sym:: abi_msp430_interrupt,
165
+ explain : "msp430-interrupt ABI is experimental and subject to change" ,
166
+ } ) ,
167
+ "x86-interrupt" => Err ( AbiDisabled :: Unstable {
168
+ feature : sym:: abi_x86_interrupt,
169
+ explain : "x86-interrupt ABI is experimental and subject to change" ,
170
+ } ) ,
171
+ "amdgpu-kernel" => Err ( AbiDisabled :: Unstable {
172
+ feature : sym:: abi_amdgpu_kernel,
173
+ explain : "amdgpu-kernel ABI is experimental and subject to change" ,
174
+ } ) ,
175
+ "avr-interrupt" | "avr-non-blocking-interrupt" => Err ( AbiDisabled :: Unstable {
176
+ feature : sym:: abi_avr_interrupt,
177
+ explain : "avr-interrupt and avr-non-blocking-interrupt ABIs are experimental and subject to change" ,
178
+ } ) ,
179
+ "efiapi" => Err ( AbiDisabled :: Unstable {
180
+ feature : sym:: abi_efiapi,
181
+ explain : "efiapi ABI is experimental and subject to change" ,
182
+ } ) ,
183
+ "C-cmse-nonsecure-call" => Err ( AbiDisabled :: Unstable {
184
+ feature : sym:: abi_c_cmse_nonsecure_call,
185
+ explain : "C-cmse-nonsecure-call ABI is experimental and subject to change" ,
186
+ } ) ,
187
+ "C-unwind" => Err ( AbiDisabled :: Unstable {
188
+ feature : sym:: c_unwind,
189
+ explain : "C-unwind ABI is experimental and subject to change" ,
190
+ } ) ,
191
+ "stdcall-unwind" => Err ( AbiDisabled :: Unstable {
192
+ feature : sym:: c_unwind,
193
+ explain : "stdcall-unwind ABI is experimental and subject to change" ,
194
+ } ) ,
195
+ "system-unwind" => Err ( AbiDisabled :: Unstable {
196
+ feature : sym:: c_unwind,
197
+ explain : "system-unwind ABI is experimental and subject to change" ,
198
+ } ) ,
199
+ "thiscall-unwind" => Err ( AbiDisabled :: Unstable {
200
+ feature : sym:: c_unwind,
201
+ explain : "thiscall-unwind ABI is experimental and subject to change" ,
202
+ } ) ,
203
+ "cdecl-unwind" => Err ( AbiDisabled :: Unstable {
204
+ feature : sym:: c_unwind,
205
+ explain : "cdecl-unwind ABI is experimental and subject to change" ,
206
+ } ) ,
207
+ "fastcall-unwind" => Err ( AbiDisabled :: Unstable {
208
+ feature : sym:: c_unwind,
209
+ explain : "fastcall-unwind ABI is experimental and subject to change" ,
210
+ } ) ,
211
+ "vectorcall-unwind" => Err ( AbiDisabled :: Unstable {
212
+ feature : sym:: c_unwind,
213
+ explain : "vectorcall-unwind ABI is experimental and subject to change" ,
214
+ } ) ,
215
+ "aapcs-unwind" => Err ( AbiDisabled :: Unstable {
216
+ feature : sym:: c_unwind,
217
+ explain : "aapcs-unwind ABI is experimental and subject to change" ,
218
+ } ) ,
219
+ "win64-unwind" => Err ( AbiDisabled :: Unstable {
220
+ feature : sym:: c_unwind,
221
+ explain : "win64-unwind ABI is experimental and subject to change" ,
222
+ } ) ,
223
+ "sysv64-unwind" => Err ( AbiDisabled :: Unstable {
224
+ feature : sym:: c_unwind,
225
+ explain : "sysv64-unwind ABI is experimental and subject to change" ,
226
+ } ) ,
227
+ "wasm" => Err ( AbiDisabled :: Unstable {
228
+ feature : sym:: wasm_abi,
229
+ explain : "wasm ABI is experimental and subject to change" ,
230
+ } ) ,
281
231
_ => Err ( AbiDisabled :: Unrecognized ) ,
282
232
}
283
233
}
0 commit comments