11
11
use ast:: NodeId ;
12
12
use early_buffered_lints:: BufferedEarlyLintId ;
13
13
use ext:: tt:: macro_parser;
14
- use feature_gate:: { self , emit_feature_err , Features , GateIssue } ;
14
+ use feature_gate:: Features ;
15
15
use parse:: { token, ParseSess } ;
16
16
use print:: pprust;
17
17
use symbol:: keywords;
18
18
use syntax_pos:: { edition:: Edition , BytePos , Span } ;
19
19
use tokenstream:: { self , DelimSpan } ;
20
- use { ast, attr } ;
20
+ use ast;
21
21
22
22
use rustc_data_structures:: sync:: Lrc ;
23
23
use std:: iter:: Peekable ;
@@ -566,32 +566,17 @@ fn parse_sep_and_kleene_op_2018<I>(
566
566
input : & mut Peekable < I > ,
567
567
span : Span ,
568
568
sess : & ParseSess ,
569
- features : & Features ,
570
- attrs : & [ ast:: Attribute ] ,
569
+ _features : & Features ,
570
+ _attrs : & [ ast:: Attribute ] ,
571
571
) -> ( Option < token:: Token > , KleeneOp )
572
572
where
573
573
I : Iterator < Item = tokenstream:: TokenTree > ,
574
574
{
575
575
// We basically look at two token trees here, denoted as #1 and #2 below
576
576
let span = match parse_kleene_op ( input, span) {
577
577
// #1 is a `?` (needs feature gate)
578
- Ok ( Ok ( ( op, op1_span) ) ) if op == KleeneOp :: ZeroOrOne => {
579
- if !features. macro_at_most_once_rep
580
- && !attr:: contains_name ( attrs, "allow_internal_unstable" )
581
- {
582
- let explain = feature_gate:: EXPLAIN_MACRO_AT_MOST_ONCE_REP ;
583
- emit_feature_err (
584
- sess,
585
- "macro_at_most_once_rep" ,
586
- op1_span,
587
- GateIssue :: Language ,
588
- explain,
589
- ) ;
590
-
591
- op1_span
592
- } else {
593
- return ( None , op) ;
594
- }
578
+ Ok ( Ok ( ( op, _op1_span) ) ) if op == KleeneOp :: ZeroOrOne => {
579
+ return ( None , op) ;
595
580
}
596
581
597
582
// #1 is a `+` or `*` KleeneOp
@@ -600,24 +585,12 @@ where
600
585
// #1 is a separator followed by #2, a KleeneOp
601
586
Ok ( Err ( ( tok, span) ) ) => match parse_kleene_op ( input, span) {
602
587
// #2 is the `?` Kleene op, which does not take a separator (error)
603
- Ok ( Ok ( ( op, op2_span ) ) ) if op == KleeneOp :: ZeroOrOne => {
588
+ Ok ( Ok ( ( op, _op2_span ) ) ) if op == KleeneOp :: ZeroOrOne => {
604
589
// Error!
605
-
606
- if !features. macro_at_most_once_rep
607
- && !attr:: contains_name ( attrs, "allow_internal_unstable" )
608
- {
609
- // FIXME: when `?` as a Kleene op is stabilized, we only need the "does not
610
- // take a macro separator" error (i.e. the `else` case).
611
- sess. span_diagnostic
612
- . struct_span_err ( op2_span, "expected `*` or `+`" )
613
- . note ( "`?` is not a macro repetition operator" )
614
- . emit ( ) ;
615
- } else {
616
- sess. span_diagnostic . span_err (
617
- span,
618
- "the `?` macro repetition operator does not take a separator" ,
619
- ) ;
620
- }
590
+ sess. span_diagnostic . span_err (
591
+ span,
592
+ "the `?` macro repetition operator does not take a separator" ,
593
+ ) ;
621
594
622
595
// Return a dummy
623
596
return ( None , KleeneOp :: ZeroOrMore ) ;
@@ -638,13 +611,8 @@ where
638
611
} ;
639
612
640
613
// If we ever get to this point, we have experienced an "unexpected token" error
641
-
642
- if !features. macro_at_most_once_rep && !attr:: contains_name ( attrs, "allow_internal_unstable" ) {
643
- sess. span_diagnostic . span_err ( span, "expected `*` or `+`" ) ;
644
- } else {
645
- sess. span_diagnostic
646
- . span_err ( span, "expected one of: `*`, `+`, or `?`" ) ;
647
- }
614
+ sess. span_diagnostic
615
+ . span_err ( span, "expected one of: `*`, `+`, or `?`" ) ;
648
616
649
617
// Return a dummy
650
618
( None , KleeneOp :: ZeroOrMore )
0 commit comments