@@ -289,21 +289,24 @@ fn parse_args<'a>(
289
289
Ok ( args)
290
290
}
291
291
292
- fn warn_duplicate_option < ' a > ( p : & mut Parser < ' a > , span : Span ) {
293
- let mut warn = if let Ok ( snippet) = p. sess . source_map ( ) . span_to_snippet ( span) {
292
+ fn err_duplicate_option < ' a > ( p : & mut Parser < ' a > , span : Span ) {
293
+ let mut err = if let Ok ( snippet) = p. sess . source_map ( ) . span_to_snippet ( span) {
294
294
p. sess
295
295
. span_diagnostic
296
- . struct_span_warn ( span, & format ! ( "the `{}` option was already provided" , snippet) )
296
+ . struct_span_err ( span, & format ! ( "the `{}` option was already provided" , snippet) )
297
297
} else {
298
- p. sess . span_diagnostic . struct_span_warn ( span, "this option was already provided" )
298
+ p. sess . span_diagnostic . struct_span_err ( span, "this option was already provided" )
299
299
} ;
300
- warn. span_suggestion (
301
- span,
302
- "remove this option" ,
303
- String :: new ( ) ,
304
- Applicability :: MachineApplicable ,
305
- ) ;
306
- warn. emit ( ) ;
300
+ err. span_help ( span, "remove this option" ) ;
301
+ err. emit ( ) ;
302
+ }
303
+
304
+ fn try_set_option < ' a > ( p : & mut Parser < ' a > , args : & mut AsmArgs , option : ast:: InlineAsmOptions ) {
305
+ if !args. option_is_set ( option) {
306
+ args. options |= option;
307
+ } else {
308
+ err_duplicate_option ( p, p. prev_token . span ) ;
309
+ }
307
310
}
308
311
309
312
fn parse_options < ' a > ( p : & mut Parser < ' a > , args : & mut AsmArgs ) -> Result < ( ) , DiagnosticBuilder < ' a > > {
@@ -313,48 +316,20 @@ fn parse_options<'a>(p: &mut Parser<'a>, args: &mut AsmArgs) -> Result<(), Diagn
313
316
314
317
while !p. eat ( & token:: CloseDelim ( token:: DelimToken :: Paren ) ) {
315
318
if p. eat ( & token:: Ident ( sym:: pure, false ) ) {
316
- if !args. option_is_set ( ast:: InlineAsmOptions :: PURE ) {
317
- args. options |= ast:: InlineAsmOptions :: PURE ;
318
- } else {
319
- warn_duplicate_option ( p, p. prev_token . span ) ;
320
- }
319
+ try_set_option ( p, args, ast:: InlineAsmOptions :: PURE ) ;
321
320
} else if p. eat ( & token:: Ident ( sym:: nomem, false ) ) {
322
- if !args. option_is_set ( ast:: InlineAsmOptions :: NOMEM ) {
323
- args. options |= ast:: InlineAsmOptions :: NOMEM ;
324
- } else {
325
- warn_duplicate_option ( p, p. prev_token . span ) ;
326
- }
321
+ try_set_option ( p, args, ast:: InlineAsmOptions :: NOMEM ) ;
327
322
} else if p. eat ( & token:: Ident ( sym:: readonly, false ) ) {
328
- if !args. option_is_set ( ast:: InlineAsmOptions :: READONLY ) {
329
- args. options |= ast:: InlineAsmOptions :: READONLY ;
330
- } else {
331
- warn_duplicate_option ( p, p. prev_token . span ) ;
332
- }
323
+ try_set_option ( p, args, ast:: InlineAsmOptions :: READONLY ) ;
333
324
} else if p. eat ( & token:: Ident ( sym:: preserves_flags, false ) ) {
334
- if !args. option_is_set ( ast:: InlineAsmOptions :: PRESERVES_FLAGS ) {
335
- args. options |= ast:: InlineAsmOptions :: PRESERVES_FLAGS ;
336
- } else {
337
- warn_duplicate_option ( p, p. prev_token . span ) ;
338
- }
325
+ try_set_option ( p, args, ast:: InlineAsmOptions :: PRESERVES_FLAGS ) ;
339
326
} else if p. eat ( & token:: Ident ( sym:: noreturn, false ) ) {
340
- if !args. option_is_set ( ast:: InlineAsmOptions :: NORETURN ) {
341
- args. options |= ast:: InlineAsmOptions :: NORETURN ;
342
- } else {
343
- warn_duplicate_option ( p, p. prev_token . span ) ;
344
- }
327
+ try_set_option ( p, args, ast:: InlineAsmOptions :: NORETURN ) ;
345
328
} else if p. eat ( & token:: Ident ( sym:: nostack, false ) ) {
346
- if !args. option_is_set ( ast:: InlineAsmOptions :: NOSTACK ) {
347
- args. options |= ast:: InlineAsmOptions :: NOSTACK ;
348
- } else {
349
- warn_duplicate_option ( p, p. prev_token . span ) ;
350
- }
329
+ try_set_option ( p, args, ast:: InlineAsmOptions :: NOSTACK ) ;
351
330
} else {
352
331
p. expect ( & token:: Ident ( sym:: att_syntax, false ) ) ?;
353
- if !args. option_is_set ( ast:: InlineAsmOptions :: ATT_SYNTAX ) {
354
- args. options |= ast:: InlineAsmOptions :: ATT_SYNTAX ;
355
- } else {
356
- warn_duplicate_option ( p, p. prev_token . span ) ;
357
- }
332
+ try_set_option ( p, args, ast:: InlineAsmOptions :: ATT_SYNTAX ) ;
358
333
}
359
334
360
335
// Allow trailing commas
0 commit comments