//! Features are enabled in programs via the crate-level attributes of
//! `#![feature(...)]` with a comma-separated list of features.
-use middle::lint;
+use lint;
use syntax::abi::RustIntrinsic;
use syntax::ast::NodeId;
("overloaded_calls", Active),
("unboxed_closure_sugar", Active),
- ("quad_precision_float", Active),
+ ("quad_precision_float", Removed),
+
+ ("rustc_diagnostic_macros", Active),
+ ("unboxed_closures", Active),
+
+ // if you change this list without updating src/doc/rust.md, cmr will be sad
// A temporary feature gate used to enable parser extensions needed
// to bootstrap fix for #5723.
/// A set of features to be used by later passes.
pub struct Features {
pub default_type_params: Cell<bool>,
- pub quad_precision_float: Cell<bool>,
pub issue_5723_bootstrap: Cell<bool>,
pub overloaded_calls: Cell<bool>,
+ pub rustc_diagnostic_macros: Cell<bool>
}
impl Features {
pub fn new() -> Features {
Features {
default_type_params: Cell::new(false),
- quad_precision_float: Cell::new(false),
issue_5723_bootstrap: Cell::new(false),
overloaded_calls: Cell::new(false),
+ rustc_diagnostic_macros: Cell::new(false)
}
}
}
ast::ExprUnary(ast::UnBox, _) => {
self.gate_box(e.span);
}
+ ast::ExprUnboxedFn(..) => {
+ self.gate_feature("unboxed_closures",
+ e.span,
+ "unboxed closures are a work-in-progress \
+ feature with known bugs");
+ }
_ => {}
}
visit::walk_expr(self, e, ());
directive not necessary");
}
None => {
- sess.add_lint(lint::UnknownFeatures,
+ sess.add_lint(lint::builtin::UNKNOWN_FEATURES,
ast::CRATE_NODE_ID,
mi.span,
"unknown feature".to_string());
sess.abort_if_errors();
sess.features.default_type_params.set(cx.has_feature("default_type_params"));
- sess.features.quad_precision_float.set(cx.has_feature("quad_precision_float"));
sess.features.issue_5723_bootstrap.set(cx.has_feature("issue_5723_bootstrap"));
sess.features.overloaded_calls.set(cx.has_feature("overloaded_calls"));
+ sess.features.rustc_diagnostic_macros.set(cx.has_feature("rustc_diagnostic_macros"));
}