Add feature gate
This commit is contained in:
@@ -1611,7 +1611,7 @@ impl Clean<Type> for ast::Ty {
|
|||||||
TyTypeof(..) => {
|
TyTypeof(..) => {
|
||||||
panic!("Unimplemented type {:?}", self.node)
|
panic!("Unimplemented type {:?}", self.node)
|
||||||
},
|
},
|
||||||
TyMac(..) => {
|
TyMac(ref m) => {
|
||||||
cx.tcx().sess.span_bug(m.span, "unexpanded type macro found during cleaning")
|
cx.tcx().sess.span_bug(m.span, "unexpanded type macro found during cleaning")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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> {
|
pub fn expand_type(t: P<ast::Ty>, fld: &mut MacroExpander) -> P<ast::Ty> {
|
||||||
let t = match t.node.clone() {
|
let t = match t.node.clone() {
|
||||||
ast::Ty_::TyMac(mac) => {
|
ast::Ty_::TyMac(mac) => {
|
||||||
|
if fld.cx.ecfg.features.unwrap().type_macros {
|
||||||
let expanded_ty = match expand_mac_invoc(mac, t.span,
|
let expanded_ty = match expand_mac_invoc(mac, t.span,
|
||||||
|r| r.make_ty(),
|
|r| r.make_ty(),
|
||||||
mark_ty,
|
mark_ty,
|
||||||
@@ -1575,9 +1576,18 @@ pub fn expand_type(t: P<ast::Ty>, fld: &mut MacroExpander) -> P<ast::Ty> {
|
|||||||
node: t.node,
|
node: t.node,
|
||||||
span: t.span,
|
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
|
_ => t
|
||||||
};
|
};
|
||||||
|
|
||||||
fold::noop_fold_ty(t, fld)
|
fold::noop_fold_ty(t, fld)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -169,6 +169,8 @@ const KNOWN_FEATURES: &'static [(&'static str, &'static str, Status)] = &[
|
|||||||
|
|
||||||
// Allows associated type defaults
|
// Allows associated type defaults
|
||||||
("associated_type_defaults", "1.2.0", Active),
|
("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)
|
// (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")),
|
"no_std is experimental")),
|
||||||
("lang", Gated("lang_items",
|
("lang", Gated("lang_items",
|
||||||
"language items are subject to change")),
|
"language items are subject to change")),
|
||||||
("linkage", Gated("linkage",
|
("linkage", Gated("linkage", "the `linkage` attribute is experimental \
|
||||||
"the `linkage` attribute is experimental \
|
|
||||||
and not portable across platforms")),
|
and not portable across platforms")),
|
||||||
("thread_local", Gated("thread_local",
|
("thread_local", Gated("thread_local",
|
||||||
"`#[thread_local]` is an experimental feature, and does not \
|
"`#[thread_local]` is an experimental feature, and does not \
|
||||||
@@ -349,6 +350,7 @@ pub struct Features {
|
|||||||
pub const_fn: bool,
|
pub const_fn: bool,
|
||||||
pub static_recursion: bool,
|
pub static_recursion: bool,
|
||||||
pub default_type_parameter_fallback: bool,
|
pub default_type_parameter_fallback: bool,
|
||||||
|
pub type_macros: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Features {
|
impl Features {
|
||||||
@@ -375,6 +377,7 @@ impl Features {
|
|||||||
const_fn: false,
|
const_fn: false,
|
||||||
static_recursion: false,
|
static_recursion: false,
|
||||||
default_type_parameter_fallback: 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"),
|
const_fn: cx.has_feature("const_fn"),
|
||||||
static_recursion: cx.has_feature("static_recursion"),
|
static_recursion: cx.has_feature("static_recursion"),
|
||||||
default_type_parameter_fallback: cx.has_feature("default_type_parameter_fallback"),
|
default_type_parameter_fallback: cx.has_feature("default_type_parameter_fallback"),
|
||||||
|
type_macros: cx.has_feature("type_macros"),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user