Finish cfg syntax transition

This commit is contained in:
Steven Fackler 2014-10-25 16:43:14 -07:00
parent 80e5fe1a56
commit 9acce10fe7

View File

@ -250,30 +250,18 @@ fn impl_item_in_cfg(cx: &mut Context, impl_item: &ast::ImplItem) -> bool {
// Determine if an item should be translated in the current crate
// configuration based on the item's attributes
fn in_cfg(diagnostic: &SpanHandler, cfg: &[P<ast::MetaItem>], attrs: &[ast::Attribute]) -> bool {
let mut in_cfg = false;
let mut seen_cfg = false;
for attr in attrs.iter() {
attrs.iter().all(|attr| {
let mis = match attr.node.value.node {
ast::MetaList(_, ref mis) if attr.check_name("cfg") => mis,
_ => continue
_ => return true
};
if mis.len() != 1 {
diagnostic.span_err(attr.span, "expected 1 cfg-pattern");
return false;
return true;
}
if seen_cfg {
diagnostic.span_err(attr.span, "The semantics of multiple `#[cfg(..)]` attributes on \
same item are changing from the union of the cfgs to \
the intersection of the cfgs. Change `#[cfg(a)] \
#[cfg(b)]` to `#[cfg(any(a, b))]`.");
return false;
}
seen_cfg = true;
in_cfg |= attr::cfg_matches(diagnostic, cfg, &*mis[0]);
}
in_cfg | !seen_cfg
attr::cfg_matches(diagnostic, cfg, &*mis[0])
})
}