@@ -431,9 +431,11 @@ macro_rules! declare_special_idents_and_keywords {(
431
431
// If the special idents get renumbered, remember to modify these two as appropriate
432
432
pub static SELF_KEYWORD_NAME : Name = Name ( SELF_KEYWORD_NAME_NUM ) ;
433
433
static STATIC_KEYWORD_NAME : Name = Name ( STATIC_KEYWORD_NAME_NUM ) ;
434
+ static SUPER_KEYWORD_NAME : Name = Name ( SUPER_KEYWORD_NAME_NUM ) ;
434
435
435
436
pub static SELF_KEYWORD_NAME_NUM : u32 = 1 ;
436
437
static STATIC_KEYWORD_NAME_NUM : u32 = 2 ;
438
+ static SUPER_KEYWORD_NAME_NUM : u32 = 3 ;
437
439
438
440
// NB: leaving holes in the ident table is bad! a different ident will get
439
441
// interned with the id from the hole, but it will be between the min and max
@@ -443,52 +445,53 @@ declare_special_idents_and_keywords! {
443
445
pub mod special_idents {
444
446
// These ones are statics
445
447
( 0 , invalid, "" ) ;
446
- ( super :: SELF_KEYWORD_NAME_NUM , self_, "self" ) ;
447
- ( super :: STATIC_KEYWORD_NAME_NUM , statik, "static" ) ;
448
- ( 3 , static_lifetime, "'static" ) ;
448
+ ( super :: SELF_KEYWORD_NAME_NUM , self_, "self" ) ;
449
+ ( super :: STATIC_KEYWORD_NAME_NUM , statik, "static" ) ;
450
+ ( super :: SUPER_KEYWORD_NAME_NUM , super_, "super" ) ;
451
+ ( 4 , static_lifetime, "'static" ) ;
449
452
450
453
// for matcher NTs
451
- ( 4 , tt, "tt" ) ;
452
- ( 5 , matchers, "matchers" ) ;
454
+ ( 5 , tt, "tt" ) ;
455
+ ( 6 , matchers, "matchers" ) ;
453
456
454
457
// outside of libsyntax
455
- ( 6 , clownshoe_abi, "__rust_abi" ) ;
456
- ( 7 , opaque, "<opaque>" ) ;
457
- ( 8 , unnamed_field, "<unnamed_field>" ) ;
458
- ( 9 , type_self, "Self" ) ;
459
- ( 10 , prelude_import, "prelude_import" ) ;
458
+ ( 7 , clownshoe_abi, "__rust_abi" ) ;
459
+ ( 8 , opaque, "<opaque>" ) ;
460
+ ( 9 , unnamed_field, "<unnamed_field>" ) ;
461
+ ( 10 , type_self, "Self" ) ;
462
+ ( 11 , prelude_import, "prelude_import" ) ;
460
463
}
461
464
462
465
pub mod keywords {
463
466
// These ones are variants of the Keyword enum
464
467
465
468
' strict:
466
- ( 11 , As , "as" ) ;
467
- ( 12 , Break , "break" ) ;
468
- ( 13 , Crate , "crate" ) ;
469
- ( 14 , Else , "else" ) ;
470
- ( 15 , Enum , "enum" ) ;
471
- ( 16 , Extern , "extern" ) ;
472
- ( 17 , False , "false" ) ;
473
- ( 18 , Fn , "fn" ) ;
474
- ( 19 , For , "for" ) ;
475
- ( 20 , If , "if" ) ;
476
- ( 21 , Impl , "impl" ) ;
477
- ( 22 , In , "in" ) ;
478
- ( 23 , Let , "let" ) ;
479
- ( 24 , Loop , "loop" ) ;
480
- ( 25 , Match , "match" ) ;
481
- ( 26 , Mod , "mod" ) ;
482
- ( 27 , Mut , "mut" ) ;
483
- ( 28 , Once , "once" ) ;
484
- ( 29 , Pub , "pub" ) ;
485
- ( 30 , Ref , "ref" ) ;
486
- ( 31 , Return , "return" ) ;
469
+ ( 12 , As , "as" ) ;
470
+ ( 13 , Break , "break" ) ;
471
+ ( 14 , Crate , "crate" ) ;
472
+ ( 15 , Else , "else" ) ;
473
+ ( 16 , Enum , "enum" ) ;
474
+ ( 17 , Extern , "extern" ) ;
475
+ ( 18 , False , "false" ) ;
476
+ ( 19 , Fn , "fn" ) ;
477
+ ( 20 , For , "for" ) ;
478
+ ( 21 , If , "if" ) ;
479
+ ( 22 , Impl , "impl" ) ;
480
+ ( 23 , In , "in" ) ;
481
+ ( 24 , Let , "let" ) ;
482
+ ( 25 , Loop , "loop" ) ;
483
+ ( 26 , Match , "match" ) ;
484
+ ( 27 , Mod , "mod" ) ;
485
+ ( 28 , Mut , "mut" ) ;
486
+ ( 29 , Once , "once" ) ;
487
+ ( 30 , Pub , "pub" ) ;
488
+ ( 31 , Ref , "ref" ) ;
489
+ ( 32 , Return , "return" ) ;
487
490
// Static and Self are also special idents (prefill de-dupes)
488
- ( super :: STATIC_KEYWORD_NAME_NUM , Static , "static" ) ;
489
- ( super :: SELF_KEYWORD_NAME_NUM , Self , "self" ) ;
490
- ( 32 , Struct , "struct" ) ;
491
- ( 33 , Super , "super" ) ;
491
+ ( super :: STATIC_KEYWORD_NAME_NUM , Static , "static" ) ;
492
+ ( super :: SELF_KEYWORD_NAME_NUM , Self , "self" ) ;
493
+ ( 33 , Struct , "struct" ) ;
494
+ ( super :: SUPER_KEYWORD_NAME_NUM , Super , "super" ) ;
492
495
( 34 , True , "true" ) ;
493
496
( 35 , Trait , "trait" ) ;
494
497
( 36 , Type , "type" ) ;
@@ -713,6 +716,7 @@ pub fn is_any_keyword(tok: &Token) -> bool {
713
716
714
717
n == SELF_KEYWORD_NAME
715
718
|| n == STATIC_KEYWORD_NAME
719
+ || n == SUPER_KEYWORD_NAME
716
720
|| STRICT_KEYWORD_START <= n
717
721
&& n <= RESERVED_KEYWORD_FINAL
718
722
} ,
@@ -727,9 +731,18 @@ pub fn is_strict_keyword(tok: &Token) -> bool {
727
731
728
732
n == SELF_KEYWORD_NAME
729
733
|| n == STATIC_KEYWORD_NAME
734
+ || n == SUPER_KEYWORD_NAME
730
735
|| STRICT_KEYWORD_START <= n
731
736
&& n <= STRICT_KEYWORD_FINAL
732
737
} ,
738
+ token:: IDENT ( sid, true ) => {
739
+ let n = sid. name ;
740
+
741
+ n != SELF_KEYWORD_NAME
742
+ && n != SUPER_KEYWORD_NAME
743
+ && STRICT_KEYWORD_START <= n
744
+ && n <= STRICT_KEYWORD_FINAL
745
+ }
733
746
_ => false ,
734
747
}
735
748
}
0 commit comments