Add feature gate

This commit is contained in:
Jared Roesch
2015-07-28 09:00:32 -07:00
parent 0bb5a1a824
commit 15e7aa79f5
3 changed files with 35 additions and 21 deletions

View File

@@ -1611,7 +1611,7 @@ impl Clean<Type> for ast::Ty {
TyTypeof(..) => {
panic!("Unimplemented type {:?}", self.node)
},
TyMac(..) => {
TyMac(ref m) => {
cx.tcx().sess.span_bug(m.span, "unexpanded type macro found during cleaning")
}
}

View File

@@ -1555,6 +1555,7 @@ fn expand_and_rename_method(sig: ast::MethodSig, body: P<ast::Block>,
pub fn expand_type(t: P<ast::Ty>, fld: &mut MacroExpander) -> P<ast::Ty> {
let t = match t.node.clone() {
ast::Ty_::TyMac(mac) => {
if fld.cx.ecfg.features.unwrap().type_macros {
let expanded_ty = match expand_mac_invoc(mac, t.span,
|r| r.make_ty(),
mark_ty,
@@ -1575,9 +1576,18 @@ pub fn expand_type(t: P<ast::Ty>, fld: &mut MacroExpander) -> P<ast::Ty> {
node: t.node,
span: t.span,
})
} else {
feature_gate::emit_feature_err(
&fld.cx.parse_sess.span_diagnostic,
"type_macros",
t.span,
"type macros are experimental (see tracking issue: 27336)");
t
}
}
_ => t
};
fold::noop_fold_ty(t, fld)
}

View File

@@ -169,6 +169,8 @@ const KNOWN_FEATURES: &'static [(&'static str, &'static str, Status)] = &[
// Allows associated type defaults
("associated_type_defaults", "1.2.0", Active),
// Allows macros to appear in the type position.
("type_macros", "1.3.0", Active),
];
// (changing above list without updating src/doc/reference.md makes @cmr sad)
@@ -228,8 +230,7 @@ pub const KNOWN_ATTRIBUTES: &'static [(&'static str, AttributeType)] = &[
"no_std is experimental")),
("lang", Gated("lang_items",
"language items are subject to change")),
("linkage", Gated("linkage",
"the `linkage` attribute is experimental \
("linkage", Gated("linkage", "the `linkage` attribute is experimental \
and not portable across platforms")),
("thread_local", Gated("thread_local",
"`#[thread_local]` is an experimental feature, and does not \
@@ -349,6 +350,7 @@ pub struct Features {
pub const_fn: bool,
pub static_recursion: bool,
pub default_type_parameter_fallback: bool,
pub type_macros: bool,
}
impl Features {
@@ -375,6 +377,7 @@ impl Features {
const_fn: false,
static_recursion: false,
default_type_parameter_fallback: false,
type_macros: false,
}
}
}
@@ -878,6 +881,7 @@ fn check_crate_inner<F>(cm: &CodeMap, span_handler: &SpanHandler,
const_fn: cx.has_feature("const_fn"),
static_recursion: cx.has_feature("static_recursion"),
default_type_parameter_fallback: cx.has_feature("default_type_parameter_fallback"),
type_macros: cx.has_feature("type_macros"),
}
}