Removed feature gate.
This commit is contained in:
parent
5f19cdc4f8
commit
d49a8d558f
@ -1,33 +0,0 @@
|
||||
# `self_struct_ctor`
|
||||
|
||||
The tracking issue for this feature is: [#51994]
|
||||
[#51994]: https://github.com/rust-lang/rust/issues/51994
|
||||
|
||||
------------------------
|
||||
|
||||
The `self_struct_ctor` feature gate lets you use the special `Self`
|
||||
identifier as a constructor and a pattern.
|
||||
|
||||
A simple example is:
|
||||
|
||||
```rust
|
||||
#![feature(self_struct_ctor)]
|
||||
|
||||
struct ST(i32, i32);
|
||||
|
||||
impl ST {
|
||||
fn new() -> Self {
|
||||
ST(0, 1)
|
||||
}
|
||||
|
||||
fn ctor() -> Self {
|
||||
Self(1,2) // constructed by `Self`, it is the same as `ST(1, 2)`
|
||||
}
|
||||
|
||||
fn pattern(self) {
|
||||
match self {
|
||||
Self(x, y) => println!("{} {}", x, y), // used as a pattern
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
@ -67,7 +67,6 @@ use syntax::ast;
|
||||
use syntax::ast::*;
|
||||
use syntax::errors;
|
||||
use syntax::ext::hygiene::{Mark, SyntaxContext};
|
||||
use syntax::feature_gate::{emit_feature_err, GateIssue};
|
||||
use syntax::print::pprust;
|
||||
use syntax::ptr::P;
|
||||
use syntax::source_map::{self, respan, CompilerDesugaringKind, Spanned};
|
||||
@ -3628,7 +3627,6 @@ impl<'a> LoweringContext<'a> {
|
||||
ParamMode::Optional,
|
||||
ImplTraitContext::disallowed(),
|
||||
);
|
||||
self.check_self_struct_ctor_feature(&qpath);
|
||||
hir::PatKind::TupleStruct(
|
||||
qpath,
|
||||
pats.iter().map(|x| self.lower_pat(x)).collect(),
|
||||
@ -3643,7 +3641,6 @@ impl<'a> LoweringContext<'a> {
|
||||
ParamMode::Optional,
|
||||
ImplTraitContext::disallowed(),
|
||||
);
|
||||
self.check_self_struct_ctor_feature(&qpath);
|
||||
hir::PatKind::Path(qpath)
|
||||
}
|
||||
PatKind::Struct(ref path, ref fields, etc) => {
|
||||
@ -4039,7 +4036,6 @@ impl<'a> LoweringContext<'a> {
|
||||
ParamMode::Optional,
|
||||
ImplTraitContext::disallowed(),
|
||||
);
|
||||
self.check_self_struct_ctor_feature(&qpath);
|
||||
hir::ExprKind::Path(qpath)
|
||||
}
|
||||
ExprKind::Break(opt_label, ref opt_expr) => {
|
||||
@ -5102,18 +5098,6 @@ impl<'a> LoweringContext<'a> {
|
||||
ThinVec::new()));
|
||||
P(self.expr_call(e.span, from_err, hir_vec![e]))
|
||||
}
|
||||
|
||||
fn check_self_struct_ctor_feature(&self, qp: &hir::QPath) {
|
||||
if let hir::QPath::Resolved(_, ref p) = qp {
|
||||
if p.segments.len() == 1 &&
|
||||
p.segments[0].ident.name == keywords::SelfType.name() &&
|
||||
!self.sess.features_untracked().self_struct_ctor {
|
||||
emit_feature_err(&self.sess.parse_sess, "self_struct_ctor",
|
||||
p.span, GateIssue::Language,
|
||||
"`Self` struct constructors are unstable");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn body_ids(bodies: &BTreeMap<hir::BodyId, hir::Body>) -> Vec<hir::BodyId> {
|
||||
|
@ -475,9 +475,6 @@ declare_features! (
|
||||
// Non-builtin attributes in inner attribute position
|
||||
(active, custom_inner_attributes, "1.30.0", Some(54726), None),
|
||||
|
||||
// Self struct constructor (RFC 2302)
|
||||
(active, self_struct_ctor, "1.30.0", Some(51994), None),
|
||||
|
||||
// allow mixing of bind-by-move in patterns and references to
|
||||
// those identifiers in guards, *if* we are using MIR-borrowck
|
||||
// (aka NLL). Essentially this means you need to be on
|
||||
@ -688,9 +685,11 @@ declare_features! (
|
||||
(accepted, macro_literal_matcher, "1.31.0", Some(35625), None),
|
||||
// Use `?` as the Kleene "at most one" operator
|
||||
(accepted, macro_at_most_once_rep, "1.32.0", Some(48075), None),
|
||||
// Self struct constructor (RFC 2302)
|
||||
(accepted, self_struct_ctor, "1.32.0", Some(51994), None),
|
||||
);
|
||||
|
||||
// If you change this, please modify src/doc/unstable-book as well. You must
|
||||
// If you change this, please modify `src/doc/unstable-book` as well. You must
|
||||
// move that documentation into the relevant place in the other docs, and
|
||||
// remove the chapter on the flag.
|
||||
|
||||
|
@ -1,7 +1,5 @@
|
||||
// run-pass
|
||||
|
||||
#![feature(self_struct_ctor)]
|
||||
|
||||
#![allow(dead_code)]
|
||||
|
||||
use std::fmt::Display;
|
||||
|
@ -1,22 +0,0 @@
|
||||
struct ST1(i32, i32);
|
||||
|
||||
impl ST1 {
|
||||
fn ctor() -> Self {
|
||||
Self(1,2)
|
||||
//~^ ERROR: `Self` struct constructors are unstable (see issue #51994) [E0658]
|
||||
}
|
||||
}
|
||||
|
||||
struct ST2;
|
||||
|
||||
impl ST2 {
|
||||
fn ctor() -> Self {
|
||||
Self
|
||||
//~^ ERROR: `Self` struct constructors are unstable (see issue #51994) [E0658]
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let _ = ST1::ctor();
|
||||
let _ = ST2::ctor();
|
||||
}
|
@ -1,19 +0,0 @@
|
||||
error[E0658]: `Self` struct constructors are unstable (see issue #51994)
|
||||
--> $DIR/feature-gate-self-struct-ctor.rs:5:9
|
||||
|
|
||||
LL | Self(1,2)
|
||||
| ^^^^
|
||||
|
|
||||
= help: add #![feature(self_struct_ctor)] to the crate attributes to enable
|
||||
|
||||
error[E0658]: `Self` struct constructors are unstable (see issue #51994)
|
||||
--> $DIR/feature-gate-self-struct-ctor.rs:14:9
|
||||
|
|
||||
LL | Self
|
||||
| ^^^^
|
||||
|
|
||||
= help: add #![feature(self_struct_ctor)] to the crate attributes to enable
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0658`.
|
@ -1,7 +1,5 @@
|
||||
// compile-pass
|
||||
|
||||
#![feature(self_struct_ctor)]
|
||||
|
||||
trait FooTrait {}
|
||||
|
||||
trait BarTrait {
|
||||
|
@ -10,5 +10,4 @@
|
||||
|
||||
fn main() {
|
||||
let Self = 22; //~ ERROR cannot find unit struct/variant or constant `Self` in this scope
|
||||
//~^ ERROR `Self` struct constructors are unstable (see issue #51994)
|
||||
}
|
||||
|
@ -4,15 +4,7 @@ error[E0531]: cannot find unit struct/variant or constant `Self` in this scope
|
||||
LL | let Self = 22; //~ ERROR cannot find unit struct/variant or constant `Self` in this scope
|
||||
| ^^^^ not found in this scope
|
||||
|
||||
error[E0658]: `Self` struct constructors are unstable (see issue #51994)
|
||||
--> $DIR/keyword-self-as-identifier.rs:12:9
|
||||
|
|
||||
LL | let Self = 22; //~ ERROR cannot find unit struct/variant or constant `Self` in this scope
|
||||
| ^^^^
|
||||
|
|
||||
= help: add #![feature(self_struct_ctor)] to the crate attributes to enable
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
error: aborting due to 1 previous error
|
||||
|
||||
Some errors occurred: E0531, E0658.
|
||||
For more information about an error, try `rustc --explain E0531`.
|
||||
|
@ -13,14 +13,11 @@ use self::Self as Foo; //~ ERROR unresolved import `self::Self`
|
||||
pub fn main() {
|
||||
let Self = 5;
|
||||
//~^ ERROR cannot find unit struct/variant or constant `Self` in this scope
|
||||
//~^^ ERROR `Self` struct constructors are unstable (see issue #51994)
|
||||
|
||||
match 15 {
|
||||
Self => (),
|
||||
//~^ ERROR cannot find unit struct/variant or constant `Self` in this scope
|
||||
//~^^ ERROR `Self` struct constructors are unstable (see issue #51994)
|
||||
Foo { x: Self } => (),
|
||||
//~^ ERROR cannot find unit struct/variant or constant `Self` in this scope
|
||||
//~^^ ERROR `Self` struct constructors are unstable (see issue #51994)
|
||||
}
|
||||
}
|
||||
|
@ -11,42 +11,18 @@ LL | let Self = 5;
|
||||
| ^^^^ not found in this scope
|
||||
|
||||
error[E0531]: cannot find unit struct/variant or constant `Self` in this scope
|
||||
--> $DIR/self_type_keyword-2.rs:19:9
|
||||
--> $DIR/self_type_keyword-2.rs:18:9
|
||||
|
|
||||
LL | Self => (),
|
||||
| ^^^^ not found in this scope
|
||||
|
||||
error[E0531]: cannot find unit struct/variant or constant `Self` in this scope
|
||||
--> $DIR/self_type_keyword-2.rs:22:18
|
||||
--> $DIR/self_type_keyword-2.rs:20:18
|
||||
|
|
||||
LL | Foo { x: Self } => (),
|
||||
| ^^^^ not found in this scope
|
||||
|
||||
error[E0658]: `Self` struct constructors are unstable (see issue #51994)
|
||||
--> $DIR/self_type_keyword-2.rs:14:9
|
||||
|
|
||||
LL | let Self = 5;
|
||||
| ^^^^
|
||||
|
|
||||
= help: add #![feature(self_struct_ctor)] to the crate attributes to enable
|
||||
|
||||
error[E0658]: `Self` struct constructors are unstable (see issue #51994)
|
||||
--> $DIR/self_type_keyword-2.rs:19:9
|
||||
|
|
||||
LL | Self => (),
|
||||
| ^^^^
|
||||
|
|
||||
= help: add #![feature(self_struct_ctor)] to the crate attributes to enable
|
||||
|
||||
error[E0658]: `Self` struct constructors are unstable (see issue #51994)
|
||||
--> $DIR/self_type_keyword-2.rs:22:18
|
||||
|
|
||||
LL | Foo { x: Self } => (),
|
||||
| ^^^^
|
||||
|
|
||||
= help: add #![feature(self_struct_ctor)] to the crate attributes to enable
|
||||
|
||||
error: aborting due to 7 previous errors
|
||||
error: aborting due to 4 previous errors
|
||||
|
||||
Some errors occurred: E0432, E0531, E0658.
|
||||
For more information about an error, try `rustc --explain E0432`.
|
||||
|
Loading…
x
Reference in New Issue
Block a user