Removed feature gate.

This commit is contained in:
Alexander Regueiro 2018-11-30 02:57:30 +00:00
parent 5f19cdc4f8
commit d49a8d558f
11 changed files with 7 additions and 138 deletions

View File

@ -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
}
}
}
```

View File

@ -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> {

View File

@ -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.

View File

@ -1,7 +1,5 @@
// run-pass
#![feature(self_struct_ctor)]
#![allow(dead_code)]
use std::fmt::Display;

View File

@ -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();
}

View File

@ -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`.

View File

@ -1,7 +1,5 @@
// compile-pass
#![feature(self_struct_ctor)]
trait FooTrait {}
trait BarTrait {

View File

@ -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)
}

View File

@ -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`.

View File

@ -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)
}
}

View File

@ -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`.