Added box_syntax feature gate; added to std and rustc crates for bootstrap.

To avoid using the feauture, change uses of `box <expr>` to
`Box::new(<expr>)` alternative, as noted by the feature gate message.

(Note that box patterns have no analogous trivial replacement, at
least not in general; you need to revise the code to do a partial
match, deref, and then the rest of the match.)

[breaking-change]
This commit is contained in:
Felix S. Klock II 2015-01-07 15:15:34 +01:00
parent 82af2a1847
commit 4a31aaddb3
14 changed files with 25 additions and 0 deletions

View file

@ -70,6 +70,7 @@ static KNOWN_FEATURES: &'static [(&'static str, Status)] = &[
("associated_types", Accepted),
("visible_private_types", Active),
("slicing_syntax", Active),
("box_syntax", Active),
("if_let", Accepted),
("while_let", Accepted),
@ -343,6 +344,12 @@ impl<'a, 'v> Visitor<'v> for PostExpansionVisitor<'a> {
e.span,
"range syntax is experimental");
}
ast::ExprBox(..) | ast::ExprUnary(ast::UnOp::UnUniq, _) => {
self.gate_feature("box_syntax",
e.span,
"box expression syntax is experimental in alpha release; \
you can call `Box::new` instead.");
}
_ => {}
}
visit::walk_expr(self, e);
@ -365,6 +372,11 @@ impl<'a, 'v> Visitor<'v> for PostExpansionVisitor<'a> {
but at the end of a slice (e.g. \
`[0, ..xs, 0]` are experimental")
}
ast::PatBox(..) => {
self.gate_feature("box_syntax",
pattern.span,
"box pattern syntax is experimental in alpha release");
}
_ => {}
}
visit::walk_pat(self, pattern)

View file

@ -24,6 +24,7 @@
#![allow(unknown_features)]
#![feature(slicing_syntax)]
#![feature(box_syntax)]
#![feature(quote, unsafe_destructor)]
extern crate arena;