Add the feature gate for the super let
experiment.
This commit is contained in:
parent
2a06022951
commit
40b1f4899a
7 changed files with 39 additions and 1 deletions
|
@ -505,6 +505,7 @@ pub fn check_crate(krate: &ast::Crate, sess: &Session, features: &Features) {
|
|||
gate_all!(contracts, "contracts are incomplete");
|
||||
gate_all!(contracts_internals, "contract internal machinery is for internal use only");
|
||||
gate_all!(where_clause_attrs, "attributes in `where` clause are unstable");
|
||||
gate_all!(super_let, "`super let` is experimental");
|
||||
|
||||
if !visitor.features.never_patterns() {
|
||||
if let Some(spans) = spans.get(&sym::never_patterns) {
|
||||
|
|
|
@ -630,6 +630,8 @@ declare_features! (
|
|||
(unstable, strict_provenance_lints, "1.61.0", Some(130351)),
|
||||
/// Allows string patterns to dereference values to match them.
|
||||
(unstable, string_deref_patterns, "1.67.0", Some(87121)),
|
||||
/// Allows `super let` statements.
|
||||
(unstable, super_let, "CURRENT_RUSTC_VERSION", Some(139076)),
|
||||
/// Allows subtrait items to shadow supertrait items.
|
||||
(unstable, supertrait_item_shadowing, "1.86.0", Some(89151)),
|
||||
/// Allows using `#[thread_local]` on `static` items.
|
||||
|
|
|
@ -73,7 +73,20 @@ impl<'a> Parser<'a> {
|
|||
});
|
||||
}
|
||||
|
||||
let stmt = if self.token.is_keyword(kw::Let) {
|
||||
let stmt = if self.token.is_keyword(kw::Super) && self.is_keyword_ahead(1, &[kw::Let]) {
|
||||
self.collect_tokens(None, attrs, force_collect, |this, attrs| {
|
||||
this.expect_keyword(exp!(Super))?;
|
||||
this.psess.gated_spans.gate(sym::super_let, this.prev_token.span);
|
||||
this.expect_keyword(exp!(Let))?;
|
||||
let local = this.parse_local(attrs)?; // FIXME(mara): implement super let
|
||||
let trailing = Trailing::from(capture_semi && this.token == token::Semi);
|
||||
Ok((
|
||||
this.mk_stmt(lo.to(this.prev_token.span), StmtKind::Let(local)),
|
||||
trailing,
|
||||
UsePreAttrPos::No,
|
||||
))
|
||||
})?
|
||||
} else if self.token.is_keyword(kw::Let) {
|
||||
self.collect_tokens(None, attrs, force_collect, |this, attrs| {
|
||||
this.expect_keyword(exp!(Let))?;
|
||||
let local = this.parse_local(attrs)?;
|
||||
|
|
|
@ -114,6 +114,7 @@ pub enum TokenType {
|
|||
KwSelfUpper,
|
||||
KwStatic,
|
||||
KwStruct,
|
||||
KwSuper,
|
||||
KwTrait,
|
||||
KwTry,
|
||||
KwType,
|
||||
|
@ -250,6 +251,7 @@ impl TokenType {
|
|||
KwSelfUpper,
|
||||
KwStatic,
|
||||
KwStruct,
|
||||
KwSuper,
|
||||
KwTrait,
|
||||
KwTry,
|
||||
KwType,
|
||||
|
@ -324,6 +326,7 @@ impl TokenType {
|
|||
TokenType::KwSelfUpper => Some(kw::SelfUpper),
|
||||
TokenType::KwStatic => Some(kw::Static),
|
||||
TokenType::KwStruct => Some(kw::Struct),
|
||||
TokenType::KwSuper => Some(kw::Super),
|
||||
TokenType::KwTrait => Some(kw::Trait),
|
||||
TokenType::KwTry => Some(kw::Try),
|
||||
TokenType::KwType => Some(kw::Type),
|
||||
|
@ -549,6 +552,7 @@ macro_rules! exp {
|
|||
(SelfUpper) => { exp!(@kw, SelfUpper, KwSelfUpper) };
|
||||
(Static) => { exp!(@kw, Static, KwStatic) };
|
||||
(Struct) => { exp!(@kw, Struct, KwStruct) };
|
||||
(Super) => { exp!(@kw, Super, KwSuper) };
|
||||
(Trait) => { exp!(@kw, Trait, KwTrait) };
|
||||
(Try) => { exp!(@kw, Try, KwTry) };
|
||||
(Type) => { exp!(@kw, Type, KwType) };
|
||||
|
|
|
@ -2036,6 +2036,7 @@ symbols! {
|
|||
sub_assign,
|
||||
sub_with_overflow,
|
||||
suggestion,
|
||||
super_let,
|
||||
supertrait_item_shadowing,
|
||||
surface_async_drop_in_place,
|
||||
sym,
|
||||
|
|
4
tests/ui/feature-gates/feature-gate-super-let.rs
Normal file
4
tests/ui/feature-gates/feature-gate-super-let.rs
Normal file
|
@ -0,0 +1,4 @@
|
|||
fn main() {
|
||||
super let a = 1;
|
||||
//~^ ERROR `super let` is experimental
|
||||
}
|
13
tests/ui/feature-gates/feature-gate-super-let.stderr
Normal file
13
tests/ui/feature-gates/feature-gate-super-let.stderr
Normal file
|
@ -0,0 +1,13 @@
|
|||
error[E0658]: `super let` is experimental
|
||||
--> $DIR/feature-gate-super-let.rs:2:5
|
||||
|
|
||||
LL | super let a = 1;
|
||||
| ^^^^^
|
||||
|
|
||||
= note: see issue #139076 <https://github.com/rust-lang/rust/issues/139076> for more information
|
||||
= help: add `#![feature(super_let)]` to the crate attributes to enable
|
||||
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0658`.
|
Loading…
Add table
Add a link
Reference in a new issue