Remove syntax and syntax_pos thread locals
This commit is contained in:
parent
fab632f975
commit
cbdf4ec03e
29 changed files with 1212 additions and 998 deletions
|
|
@ -398,6 +398,7 @@ mod test {
|
|||
use syntax::ast::*;
|
||||
use syntax::codemap::dummy_spanned;
|
||||
use syntax_pos::DUMMY_SP;
|
||||
use syntax::with_globals;
|
||||
|
||||
fn word_cfg(s: &str) -> Cfg {
|
||||
Cfg::Cfg(Symbol::intern(s), None)
|
||||
|
|
@ -409,479 +410,494 @@ mod test {
|
|||
|
||||
#[test]
|
||||
fn test_cfg_not() {
|
||||
assert_eq!(!Cfg::False, Cfg::True);
|
||||
assert_eq!(!Cfg::True, Cfg::False);
|
||||
assert_eq!(!word_cfg("test"), Cfg::Not(Box::new(word_cfg("test"))));
|
||||
assert_eq!(
|
||||
!Cfg::All(vec![word_cfg("a"), word_cfg("b")]),
|
||||
Cfg::Not(Box::new(Cfg::All(vec![word_cfg("a"), word_cfg("b")])))
|
||||
);
|
||||
assert_eq!(
|
||||
!Cfg::Any(vec![word_cfg("a"), word_cfg("b")]),
|
||||
Cfg::Not(Box::new(Cfg::Any(vec![word_cfg("a"), word_cfg("b")])))
|
||||
);
|
||||
assert_eq!(!Cfg::Not(Box::new(word_cfg("test"))), word_cfg("test"));
|
||||
with_globals(|| {
|
||||
assert_eq!(!Cfg::False, Cfg::True);
|
||||
assert_eq!(!Cfg::True, Cfg::False);
|
||||
assert_eq!(!word_cfg("test"), Cfg::Not(Box::new(word_cfg("test"))));
|
||||
assert_eq!(
|
||||
!Cfg::All(vec![word_cfg("a"), word_cfg("b")]),
|
||||
Cfg::Not(Box::new(Cfg::All(vec![word_cfg("a"), word_cfg("b")])))
|
||||
);
|
||||
assert_eq!(
|
||||
!Cfg::Any(vec![word_cfg("a"), word_cfg("b")]),
|
||||
Cfg::Not(Box::new(Cfg::Any(vec![word_cfg("a"), word_cfg("b")])))
|
||||
);
|
||||
assert_eq!(!Cfg::Not(Box::new(word_cfg("test"))), word_cfg("test"));
|
||||
})
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_cfg_and() {
|
||||
let mut x = Cfg::False;
|
||||
x &= Cfg::True;
|
||||
assert_eq!(x, Cfg::False);
|
||||
with_globals(|| {
|
||||
let mut x = Cfg::False;
|
||||
x &= Cfg::True;
|
||||
assert_eq!(x, Cfg::False);
|
||||
|
||||
x = word_cfg("test");
|
||||
x &= Cfg::False;
|
||||
assert_eq!(x, Cfg::False);
|
||||
x = word_cfg("test");
|
||||
x &= Cfg::False;
|
||||
assert_eq!(x, Cfg::False);
|
||||
|
||||
x = word_cfg("test2");
|
||||
x &= Cfg::True;
|
||||
assert_eq!(x, word_cfg("test2"));
|
||||
x = word_cfg("test2");
|
||||
x &= Cfg::True;
|
||||
assert_eq!(x, word_cfg("test2"));
|
||||
|
||||
x = Cfg::True;
|
||||
x &= word_cfg("test3");
|
||||
assert_eq!(x, word_cfg("test3"));
|
||||
x = Cfg::True;
|
||||
x &= word_cfg("test3");
|
||||
assert_eq!(x, word_cfg("test3"));
|
||||
|
||||
x &= word_cfg("test4");
|
||||
assert_eq!(x, Cfg::All(vec![word_cfg("test3"), word_cfg("test4")]));
|
||||
x &= word_cfg("test4");
|
||||
assert_eq!(x, Cfg::All(vec![word_cfg("test3"), word_cfg("test4")]));
|
||||
|
||||
x &= word_cfg("test5");
|
||||
assert_eq!(x, Cfg::All(vec![word_cfg("test3"), word_cfg("test4"), word_cfg("test5")]));
|
||||
x &= word_cfg("test5");
|
||||
assert_eq!(x, Cfg::All(vec![word_cfg("test3"), word_cfg("test4"), word_cfg("test5")]));
|
||||
|
||||
x &= Cfg::All(vec![word_cfg("test6"), word_cfg("test7")]);
|
||||
assert_eq!(x, Cfg::All(vec![
|
||||
word_cfg("test3"),
|
||||
word_cfg("test4"),
|
||||
word_cfg("test5"),
|
||||
word_cfg("test6"),
|
||||
word_cfg("test7"),
|
||||
]));
|
||||
x &= Cfg::All(vec![word_cfg("test6"), word_cfg("test7")]);
|
||||
assert_eq!(x, Cfg::All(vec![
|
||||
word_cfg("test3"),
|
||||
word_cfg("test4"),
|
||||
word_cfg("test5"),
|
||||
word_cfg("test6"),
|
||||
word_cfg("test7"),
|
||||
]));
|
||||
|
||||
let mut y = Cfg::Any(vec![word_cfg("a"), word_cfg("b")]);
|
||||
y &= x;
|
||||
assert_eq!(y, Cfg::All(vec![
|
||||
word_cfg("test3"),
|
||||
word_cfg("test4"),
|
||||
word_cfg("test5"),
|
||||
word_cfg("test6"),
|
||||
word_cfg("test7"),
|
||||
Cfg::Any(vec![word_cfg("a"), word_cfg("b")]),
|
||||
]));
|
||||
let mut y = Cfg::Any(vec![word_cfg("a"), word_cfg("b")]);
|
||||
y &= x;
|
||||
assert_eq!(y, Cfg::All(vec![
|
||||
word_cfg("test3"),
|
||||
word_cfg("test4"),
|
||||
word_cfg("test5"),
|
||||
word_cfg("test6"),
|
||||
word_cfg("test7"),
|
||||
Cfg::Any(vec![word_cfg("a"), word_cfg("b")]),
|
||||
]));
|
||||
|
||||
assert_eq!(
|
||||
word_cfg("a") & word_cfg("b") & word_cfg("c"),
|
||||
Cfg::All(vec![word_cfg("a"), word_cfg("b"), word_cfg("c")])
|
||||
);
|
||||
assert_eq!(
|
||||
word_cfg("a") & word_cfg("b") & word_cfg("c"),
|
||||
Cfg::All(vec![word_cfg("a"), word_cfg("b"), word_cfg("c")])
|
||||
);
|
||||
})
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_cfg_or() {
|
||||
let mut x = Cfg::True;
|
||||
x |= Cfg::False;
|
||||
assert_eq!(x, Cfg::True);
|
||||
with_globals(|| {
|
||||
let mut x = Cfg::True;
|
||||
x |= Cfg::False;
|
||||
assert_eq!(x, Cfg::True);
|
||||
|
||||
x = word_cfg("test");
|
||||
x |= Cfg::True;
|
||||
assert_eq!(x, Cfg::True);
|
||||
x = word_cfg("test");
|
||||
x |= Cfg::True;
|
||||
assert_eq!(x, Cfg::True);
|
||||
|
||||
x = word_cfg("test2");
|
||||
x |= Cfg::False;
|
||||
assert_eq!(x, word_cfg("test2"));
|
||||
x = word_cfg("test2");
|
||||
x |= Cfg::False;
|
||||
assert_eq!(x, word_cfg("test2"));
|
||||
|
||||
x = Cfg::False;
|
||||
x |= word_cfg("test3");
|
||||
assert_eq!(x, word_cfg("test3"));
|
||||
x = Cfg::False;
|
||||
x |= word_cfg("test3");
|
||||
assert_eq!(x, word_cfg("test3"));
|
||||
|
||||
x |= word_cfg("test4");
|
||||
assert_eq!(x, Cfg::Any(vec![word_cfg("test3"), word_cfg("test4")]));
|
||||
x |= word_cfg("test4");
|
||||
assert_eq!(x, Cfg::Any(vec![word_cfg("test3"), word_cfg("test4")]));
|
||||
|
||||
x |= word_cfg("test5");
|
||||
assert_eq!(x, Cfg::Any(vec![word_cfg("test3"), word_cfg("test4"), word_cfg("test5")]));
|
||||
x |= word_cfg("test5");
|
||||
assert_eq!(x, Cfg::Any(vec![word_cfg("test3"), word_cfg("test4"), word_cfg("test5")]));
|
||||
|
||||
x |= Cfg::Any(vec![word_cfg("test6"), word_cfg("test7")]);
|
||||
assert_eq!(x, Cfg::Any(vec![
|
||||
word_cfg("test3"),
|
||||
word_cfg("test4"),
|
||||
word_cfg("test5"),
|
||||
word_cfg("test6"),
|
||||
word_cfg("test7"),
|
||||
]));
|
||||
x |= Cfg::Any(vec![word_cfg("test6"), word_cfg("test7")]);
|
||||
assert_eq!(x, Cfg::Any(vec![
|
||||
word_cfg("test3"),
|
||||
word_cfg("test4"),
|
||||
word_cfg("test5"),
|
||||
word_cfg("test6"),
|
||||
word_cfg("test7"),
|
||||
]));
|
||||
|
||||
let mut y = Cfg::All(vec![word_cfg("a"), word_cfg("b")]);
|
||||
y |= x;
|
||||
assert_eq!(y, Cfg::Any(vec![
|
||||
word_cfg("test3"),
|
||||
word_cfg("test4"),
|
||||
word_cfg("test5"),
|
||||
word_cfg("test6"),
|
||||
word_cfg("test7"),
|
||||
Cfg::All(vec![word_cfg("a"), word_cfg("b")]),
|
||||
]));
|
||||
let mut y = Cfg::All(vec![word_cfg("a"), word_cfg("b")]);
|
||||
y |= x;
|
||||
assert_eq!(y, Cfg::Any(vec![
|
||||
word_cfg("test3"),
|
||||
word_cfg("test4"),
|
||||
word_cfg("test5"),
|
||||
word_cfg("test6"),
|
||||
word_cfg("test7"),
|
||||
Cfg::All(vec![word_cfg("a"), word_cfg("b")]),
|
||||
]));
|
||||
|
||||
assert_eq!(
|
||||
word_cfg("a") | word_cfg("b") | word_cfg("c"),
|
||||
Cfg::Any(vec![word_cfg("a"), word_cfg("b"), word_cfg("c")])
|
||||
);
|
||||
assert_eq!(
|
||||
word_cfg("a") | word_cfg("b") | word_cfg("c"),
|
||||
Cfg::Any(vec![word_cfg("a"), word_cfg("b"), word_cfg("c")])
|
||||
);
|
||||
})
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_parse_ok() {
|
||||
let mi = MetaItem {
|
||||
name: Symbol::intern("all"),
|
||||
node: MetaItemKind::Word,
|
||||
span: DUMMY_SP,
|
||||
};
|
||||
assert_eq!(Cfg::parse(&mi), Ok(word_cfg("all")));
|
||||
with_globals(|| {
|
||||
let mi = MetaItem {
|
||||
name: Symbol::intern("all"),
|
||||
node: MetaItemKind::Word,
|
||||
span: DUMMY_SP,
|
||||
};
|
||||
assert_eq!(Cfg::parse(&mi), Ok(word_cfg("all")));
|
||||
|
||||
let mi = MetaItem {
|
||||
name: Symbol::intern("all"),
|
||||
node: MetaItemKind::NameValue(dummy_spanned(LitKind::Str(
|
||||
Symbol::intern("done"),
|
||||
StrStyle::Cooked,
|
||||
))),
|
||||
span: DUMMY_SP,
|
||||
};
|
||||
assert_eq!(Cfg::parse(&mi), Ok(name_value_cfg("all", "done")));
|
||||
let mi = MetaItem {
|
||||
name: Symbol::intern("all"),
|
||||
node: MetaItemKind::NameValue(dummy_spanned(LitKind::Str(
|
||||
Symbol::intern("done"),
|
||||
StrStyle::Cooked,
|
||||
))),
|
||||
span: DUMMY_SP,
|
||||
};
|
||||
assert_eq!(Cfg::parse(&mi), Ok(name_value_cfg("all", "done")));
|
||||
|
||||
let mi = MetaItem {
|
||||
name: Symbol::intern("all"),
|
||||
node: MetaItemKind::List(vec![
|
||||
dummy_spanned(NestedMetaItemKind::MetaItem(MetaItem {
|
||||
name: Symbol::intern("a"),
|
||||
node: MetaItemKind::Word,
|
||||
span: DUMMY_SP,
|
||||
})),
|
||||
dummy_spanned(NestedMetaItemKind::MetaItem(MetaItem {
|
||||
name: Symbol::intern("b"),
|
||||
node: MetaItemKind::Word,
|
||||
span: DUMMY_SP,
|
||||
})),
|
||||
]),
|
||||
span: DUMMY_SP,
|
||||
};
|
||||
assert_eq!(Cfg::parse(&mi), Ok(word_cfg("a") & word_cfg("b")));
|
||||
let mi = MetaItem {
|
||||
name: Symbol::intern("all"),
|
||||
node: MetaItemKind::List(vec![
|
||||
dummy_spanned(NestedMetaItemKind::MetaItem(MetaItem {
|
||||
name: Symbol::intern("a"),
|
||||
node: MetaItemKind::Word,
|
||||
span: DUMMY_SP,
|
||||
})),
|
||||
dummy_spanned(NestedMetaItemKind::MetaItem(MetaItem {
|
||||
name: Symbol::intern("b"),
|
||||
node: MetaItemKind::Word,
|
||||
span: DUMMY_SP,
|
||||
})),
|
||||
]),
|
||||
span: DUMMY_SP,
|
||||
};
|
||||
assert_eq!(Cfg::parse(&mi), Ok(word_cfg("a") & word_cfg("b")));
|
||||
|
||||
let mi = MetaItem {
|
||||
name: Symbol::intern("any"),
|
||||
node: MetaItemKind::List(vec![
|
||||
dummy_spanned(NestedMetaItemKind::MetaItem(MetaItem {
|
||||
name: Symbol::intern("a"),
|
||||
node: MetaItemKind::Word,
|
||||
span: DUMMY_SP,
|
||||
})),
|
||||
dummy_spanned(NestedMetaItemKind::MetaItem(MetaItem {
|
||||
name: Symbol::intern("b"),
|
||||
node: MetaItemKind::Word,
|
||||
span: DUMMY_SP,
|
||||
})),
|
||||
]),
|
||||
span: DUMMY_SP,
|
||||
};
|
||||
assert_eq!(Cfg::parse(&mi), Ok(word_cfg("a") | word_cfg("b")));
|
||||
let mi = MetaItem {
|
||||
name: Symbol::intern("any"),
|
||||
node: MetaItemKind::List(vec![
|
||||
dummy_spanned(NestedMetaItemKind::MetaItem(MetaItem {
|
||||
name: Symbol::intern("a"),
|
||||
node: MetaItemKind::Word,
|
||||
span: DUMMY_SP,
|
||||
})),
|
||||
dummy_spanned(NestedMetaItemKind::MetaItem(MetaItem {
|
||||
name: Symbol::intern("b"),
|
||||
node: MetaItemKind::Word,
|
||||
span: DUMMY_SP,
|
||||
})),
|
||||
]),
|
||||
span: DUMMY_SP,
|
||||
};
|
||||
assert_eq!(Cfg::parse(&mi), Ok(word_cfg("a") | word_cfg("b")));
|
||||
|
||||
let mi = MetaItem {
|
||||
name: Symbol::intern("not"),
|
||||
node: MetaItemKind::List(vec![
|
||||
dummy_spanned(NestedMetaItemKind::MetaItem(MetaItem {
|
||||
name: Symbol::intern("a"),
|
||||
node: MetaItemKind::Word,
|
||||
span: DUMMY_SP,
|
||||
})),
|
||||
]),
|
||||
span: DUMMY_SP,
|
||||
};
|
||||
assert_eq!(Cfg::parse(&mi), Ok(!word_cfg("a")));
|
||||
let mi = MetaItem {
|
||||
name: Symbol::intern("not"),
|
||||
node: MetaItemKind::List(vec![
|
||||
dummy_spanned(NestedMetaItemKind::MetaItem(MetaItem {
|
||||
name: Symbol::intern("a"),
|
||||
node: MetaItemKind::Word,
|
||||
span: DUMMY_SP,
|
||||
})),
|
||||
]),
|
||||
span: DUMMY_SP,
|
||||
};
|
||||
assert_eq!(Cfg::parse(&mi), Ok(!word_cfg("a")));
|
||||
|
||||
let mi = MetaItem {
|
||||
name: Symbol::intern("not"),
|
||||
node: MetaItemKind::List(vec![
|
||||
dummy_spanned(NestedMetaItemKind::MetaItem(MetaItem {
|
||||
name: Symbol::intern("any"),
|
||||
node: MetaItemKind::List(vec![
|
||||
dummy_spanned(NestedMetaItemKind::MetaItem(MetaItem {
|
||||
name: Symbol::intern("a"),
|
||||
node: MetaItemKind::Word,
|
||||
span: DUMMY_SP,
|
||||
})),
|
||||
dummy_spanned(NestedMetaItemKind::MetaItem(MetaItem {
|
||||
name: Symbol::intern("all"),
|
||||
node: MetaItemKind::List(vec![
|
||||
dummy_spanned(NestedMetaItemKind::MetaItem(MetaItem {
|
||||
name: Symbol::intern("b"),
|
||||
node: MetaItemKind::Word,
|
||||
span: DUMMY_SP,
|
||||
})),
|
||||
dummy_spanned(NestedMetaItemKind::MetaItem(MetaItem {
|
||||
name: Symbol::intern("c"),
|
||||
node: MetaItemKind::Word,
|
||||
span: DUMMY_SP,
|
||||
})),
|
||||
]),
|
||||
span: DUMMY_SP,
|
||||
})),
|
||||
]),
|
||||
span: DUMMY_SP,
|
||||
})),
|
||||
]),
|
||||
span: DUMMY_SP,
|
||||
};
|
||||
assert_eq!(Cfg::parse(&mi), Ok(!(word_cfg("a") | (word_cfg("b") & word_cfg("c")))));
|
||||
let mi = MetaItem {
|
||||
name: Symbol::intern("not"),
|
||||
node: MetaItemKind::List(vec![
|
||||
dummy_spanned(NestedMetaItemKind::MetaItem(MetaItem {
|
||||
name: Symbol::intern("any"),
|
||||
node: MetaItemKind::List(vec![
|
||||
dummy_spanned(NestedMetaItemKind::MetaItem(MetaItem {
|
||||
name: Symbol::intern("a"),
|
||||
node: MetaItemKind::Word,
|
||||
span: DUMMY_SP,
|
||||
})),
|
||||
dummy_spanned(NestedMetaItemKind::MetaItem(MetaItem {
|
||||
name: Symbol::intern("all"),
|
||||
node: MetaItemKind::List(vec![
|
||||
dummy_spanned(NestedMetaItemKind::MetaItem(MetaItem {
|
||||
name: Symbol::intern("b"),
|
||||
node: MetaItemKind::Word,
|
||||
span: DUMMY_SP,
|
||||
})),
|
||||
dummy_spanned(NestedMetaItemKind::MetaItem(MetaItem {
|
||||
name: Symbol::intern("c"),
|
||||
node: MetaItemKind::Word,
|
||||
span: DUMMY_SP,
|
||||
})),
|
||||
]),
|
||||
span: DUMMY_SP,
|
||||
})),
|
||||
]),
|
||||
span: DUMMY_SP,
|
||||
})),
|
||||
]),
|
||||
span: DUMMY_SP,
|
||||
};
|
||||
assert_eq!(Cfg::parse(&mi), Ok(!(word_cfg("a") | (word_cfg("b") & word_cfg("c")))));
|
||||
|
||||
let mi = MetaItem {
|
||||
name: Symbol::intern("all"),
|
||||
node: MetaItemKind::List(vec![
|
||||
dummy_spanned(NestedMetaItemKind::MetaItem(MetaItem {
|
||||
name: Symbol::intern("a"),
|
||||
node: MetaItemKind::Word,
|
||||
span: DUMMY_SP,
|
||||
})),
|
||||
dummy_spanned(NestedMetaItemKind::MetaItem(MetaItem {
|
||||
name: Symbol::intern("b"),
|
||||
node: MetaItemKind::Word,
|
||||
span: DUMMY_SP,
|
||||
})),
|
||||
dummy_spanned(NestedMetaItemKind::MetaItem(MetaItem {
|
||||
name: Symbol::intern("c"),
|
||||
node: MetaItemKind::Word,
|
||||
span: DUMMY_SP,
|
||||
})),
|
||||
]),
|
||||
span: DUMMY_SP,
|
||||
};
|
||||
assert_eq!(Cfg::parse(&mi), Ok(word_cfg("a") & word_cfg("b") & word_cfg("c")));
|
||||
let mi = MetaItem {
|
||||
name: Symbol::intern("all"),
|
||||
node: MetaItemKind::List(vec![
|
||||
dummy_spanned(NestedMetaItemKind::MetaItem(MetaItem {
|
||||
name: Symbol::intern("a"),
|
||||
node: MetaItemKind::Word,
|
||||
span: DUMMY_SP,
|
||||
})),
|
||||
dummy_spanned(NestedMetaItemKind::MetaItem(MetaItem {
|
||||
name: Symbol::intern("b"),
|
||||
node: MetaItemKind::Word,
|
||||
span: DUMMY_SP,
|
||||
})),
|
||||
dummy_spanned(NestedMetaItemKind::MetaItem(MetaItem {
|
||||
name: Symbol::intern("c"),
|
||||
node: MetaItemKind::Word,
|
||||
span: DUMMY_SP,
|
||||
})),
|
||||
]),
|
||||
span: DUMMY_SP,
|
||||
};
|
||||
assert_eq!(Cfg::parse(&mi), Ok(word_cfg("a") & word_cfg("b") & word_cfg("c")));
|
||||
})
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_parse_err() {
|
||||
let mi = MetaItem {
|
||||
name: Symbol::intern("foo"),
|
||||
node: MetaItemKind::NameValue(dummy_spanned(LitKind::Bool(false))),
|
||||
span: DUMMY_SP,
|
||||
};
|
||||
assert!(Cfg::parse(&mi).is_err());
|
||||
with_globals(|| {
|
||||
let mi = MetaItem {
|
||||
name: Symbol::intern("foo"),
|
||||
node: MetaItemKind::NameValue(dummy_spanned(LitKind::Bool(false))),
|
||||
span: DUMMY_SP,
|
||||
};
|
||||
assert!(Cfg::parse(&mi).is_err());
|
||||
|
||||
let mi = MetaItem {
|
||||
name: Symbol::intern("not"),
|
||||
node: MetaItemKind::List(vec![
|
||||
dummy_spanned(NestedMetaItemKind::MetaItem(MetaItem {
|
||||
name: Symbol::intern("a"),
|
||||
node: MetaItemKind::Word,
|
||||
span: DUMMY_SP,
|
||||
})),
|
||||
dummy_spanned(NestedMetaItemKind::MetaItem(MetaItem {
|
||||
name: Symbol::intern("b"),
|
||||
node: MetaItemKind::Word,
|
||||
span: DUMMY_SP,
|
||||
})),
|
||||
]),
|
||||
span: DUMMY_SP,
|
||||
};
|
||||
assert!(Cfg::parse(&mi).is_err());
|
||||
let mi = MetaItem {
|
||||
name: Symbol::intern("not"),
|
||||
node: MetaItemKind::List(vec![
|
||||
dummy_spanned(NestedMetaItemKind::MetaItem(MetaItem {
|
||||
name: Symbol::intern("a"),
|
||||
node: MetaItemKind::Word,
|
||||
span: DUMMY_SP,
|
||||
})),
|
||||
dummy_spanned(NestedMetaItemKind::MetaItem(MetaItem {
|
||||
name: Symbol::intern("b"),
|
||||
node: MetaItemKind::Word,
|
||||
span: DUMMY_SP,
|
||||
})),
|
||||
]),
|
||||
span: DUMMY_SP,
|
||||
};
|
||||
assert!(Cfg::parse(&mi).is_err());
|
||||
|
||||
let mi = MetaItem {
|
||||
name: Symbol::intern("not"),
|
||||
node: MetaItemKind::List(vec![]),
|
||||
span: DUMMY_SP,
|
||||
};
|
||||
assert!(Cfg::parse(&mi).is_err());
|
||||
let mi = MetaItem {
|
||||
name: Symbol::intern("not"),
|
||||
node: MetaItemKind::List(vec![]),
|
||||
span: DUMMY_SP,
|
||||
};
|
||||
assert!(Cfg::parse(&mi).is_err());
|
||||
|
||||
let mi = MetaItem {
|
||||
name: Symbol::intern("foo"),
|
||||
node: MetaItemKind::List(vec![
|
||||
dummy_spanned(NestedMetaItemKind::MetaItem(MetaItem {
|
||||
name: Symbol::intern("a"),
|
||||
node: MetaItemKind::Word,
|
||||
span: DUMMY_SP,
|
||||
})),
|
||||
]),
|
||||
span: DUMMY_SP,
|
||||
};
|
||||
assert!(Cfg::parse(&mi).is_err());
|
||||
let mi = MetaItem {
|
||||
name: Symbol::intern("foo"),
|
||||
node: MetaItemKind::List(vec![
|
||||
dummy_spanned(NestedMetaItemKind::MetaItem(MetaItem {
|
||||
name: Symbol::intern("a"),
|
||||
node: MetaItemKind::Word,
|
||||
span: DUMMY_SP,
|
||||
})),
|
||||
]),
|
||||
span: DUMMY_SP,
|
||||
};
|
||||
assert!(Cfg::parse(&mi).is_err());
|
||||
|
||||
let mi = MetaItem {
|
||||
name: Symbol::intern("all"),
|
||||
node: MetaItemKind::List(vec![
|
||||
dummy_spanned(NestedMetaItemKind::MetaItem(MetaItem {
|
||||
name: Symbol::intern("foo"),
|
||||
node: MetaItemKind::List(vec![]),
|
||||
span: DUMMY_SP,
|
||||
})),
|
||||
dummy_spanned(NestedMetaItemKind::MetaItem(MetaItem {
|
||||
name: Symbol::intern("b"),
|
||||
node: MetaItemKind::Word,
|
||||
span: DUMMY_SP,
|
||||
})),
|
||||
]),
|
||||
span: DUMMY_SP,
|
||||
};
|
||||
assert!(Cfg::parse(&mi).is_err());
|
||||
let mi = MetaItem {
|
||||
name: Symbol::intern("all"),
|
||||
node: MetaItemKind::List(vec![
|
||||
dummy_spanned(NestedMetaItemKind::MetaItem(MetaItem {
|
||||
name: Symbol::intern("foo"),
|
||||
node: MetaItemKind::List(vec![]),
|
||||
span: DUMMY_SP,
|
||||
})),
|
||||
dummy_spanned(NestedMetaItemKind::MetaItem(MetaItem {
|
||||
name: Symbol::intern("b"),
|
||||
node: MetaItemKind::Word,
|
||||
span: DUMMY_SP,
|
||||
})),
|
||||
]),
|
||||
span: DUMMY_SP,
|
||||
};
|
||||
assert!(Cfg::parse(&mi).is_err());
|
||||
|
||||
let mi = MetaItem {
|
||||
name: Symbol::intern("any"),
|
||||
node: MetaItemKind::List(vec![
|
||||
dummy_spanned(NestedMetaItemKind::MetaItem(MetaItem {
|
||||
name: Symbol::intern("a"),
|
||||
node: MetaItemKind::Word,
|
||||
span: DUMMY_SP,
|
||||
})),
|
||||
dummy_spanned(NestedMetaItemKind::MetaItem(MetaItem {
|
||||
name: Symbol::intern("foo"),
|
||||
node: MetaItemKind::List(vec![]),
|
||||
span: DUMMY_SP,
|
||||
})),
|
||||
]),
|
||||
span: DUMMY_SP,
|
||||
};
|
||||
assert!(Cfg::parse(&mi).is_err());
|
||||
let mi = MetaItem {
|
||||
name: Symbol::intern("any"),
|
||||
node: MetaItemKind::List(vec![
|
||||
dummy_spanned(NestedMetaItemKind::MetaItem(MetaItem {
|
||||
name: Symbol::intern("a"),
|
||||
node: MetaItemKind::Word,
|
||||
span: DUMMY_SP,
|
||||
})),
|
||||
dummy_spanned(NestedMetaItemKind::MetaItem(MetaItem {
|
||||
name: Symbol::intern("foo"),
|
||||
node: MetaItemKind::List(vec![]),
|
||||
span: DUMMY_SP,
|
||||
})),
|
||||
]),
|
||||
span: DUMMY_SP,
|
||||
};
|
||||
assert!(Cfg::parse(&mi).is_err());
|
||||
|
||||
let mi = MetaItem {
|
||||
name: Symbol::intern("not"),
|
||||
node: MetaItemKind::List(vec![
|
||||
dummy_spanned(NestedMetaItemKind::MetaItem(MetaItem {
|
||||
name: Symbol::intern("foo"),
|
||||
node: MetaItemKind::List(vec![]),
|
||||
span: DUMMY_SP,
|
||||
})),
|
||||
]),
|
||||
span: DUMMY_SP,
|
||||
};
|
||||
assert!(Cfg::parse(&mi).is_err());
|
||||
let mi = MetaItem {
|
||||
name: Symbol::intern("not"),
|
||||
node: MetaItemKind::List(vec![
|
||||
dummy_spanned(NestedMetaItemKind::MetaItem(MetaItem {
|
||||
name: Symbol::intern("foo"),
|
||||
node: MetaItemKind::List(vec![]),
|
||||
span: DUMMY_SP,
|
||||
})),
|
||||
]),
|
||||
span: DUMMY_SP,
|
||||
};
|
||||
assert!(Cfg::parse(&mi).is_err());
|
||||
})
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_render_short_html() {
|
||||
assert_eq!(
|
||||
word_cfg("unix").render_short_html(),
|
||||
"Unix"
|
||||
);
|
||||
assert_eq!(
|
||||
name_value_cfg("target_os", "macos").render_short_html(),
|
||||
"macOS"
|
||||
);
|
||||
assert_eq!(
|
||||
name_value_cfg("target_pointer_width", "16").render_short_html(),
|
||||
"16-bit"
|
||||
);
|
||||
assert_eq!(
|
||||
name_value_cfg("target_endian", "little").render_short_html(),
|
||||
"Little-endian"
|
||||
);
|
||||
assert_eq!(
|
||||
(!word_cfg("windows")).render_short_html(),
|
||||
"Non-Windows"
|
||||
);
|
||||
assert_eq!(
|
||||
(word_cfg("unix") & word_cfg("windows")).render_short_html(),
|
||||
"Unix and Windows"
|
||||
);
|
||||
assert_eq!(
|
||||
(word_cfg("unix") | word_cfg("windows")).render_short_html(),
|
||||
"Unix or Windows"
|
||||
);
|
||||
assert_eq!(
|
||||
(
|
||||
word_cfg("unix") & word_cfg("windows") & word_cfg("debug_assertions")
|
||||
).render_short_html(),
|
||||
"Unix and Windows and debug-assertions enabled"
|
||||
);
|
||||
assert_eq!(
|
||||
(
|
||||
word_cfg("unix") | word_cfg("windows") | word_cfg("debug_assertions")
|
||||
).render_short_html(),
|
||||
"Unix or Windows or debug-assertions enabled"
|
||||
);
|
||||
assert_eq!(
|
||||
(
|
||||
!(word_cfg("unix") | word_cfg("windows") | word_cfg("debug_assertions"))
|
||||
).render_short_html(),
|
||||
"Neither Unix nor Windows nor debug-assertions enabled"
|
||||
);
|
||||
assert_eq!(
|
||||
(
|
||||
(word_cfg("unix") & name_value_cfg("target_arch", "x86_64")) |
|
||||
(word_cfg("windows") & name_value_cfg("target_pointer_width", "64"))
|
||||
).render_short_html(),
|
||||
"Unix and x86-64, or Windows and 64-bit"
|
||||
);
|
||||
assert_eq!(
|
||||
(!(word_cfg("unix") & word_cfg("windows"))).render_short_html(),
|
||||
"Not (Unix and Windows)"
|
||||
);
|
||||
assert_eq!(
|
||||
(
|
||||
(word_cfg("debug_assertions") | word_cfg("windows")) & word_cfg("unix")
|
||||
).render_short_html(),
|
||||
"(Debug-assertions enabled or Windows) and Unix"
|
||||
);
|
||||
with_globals(|| {
|
||||
assert_eq!(
|
||||
word_cfg("unix").render_short_html(),
|
||||
"Unix"
|
||||
);
|
||||
assert_eq!(
|
||||
name_value_cfg("target_os", "macos").render_short_html(),
|
||||
"macOS"
|
||||
);
|
||||
assert_eq!(
|
||||
name_value_cfg("target_pointer_width", "16").render_short_html(),
|
||||
"16-bit"
|
||||
);
|
||||
assert_eq!(
|
||||
name_value_cfg("target_endian", "little").render_short_html(),
|
||||
"Little-endian"
|
||||
);
|
||||
assert_eq!(
|
||||
(!word_cfg("windows")).render_short_html(),
|
||||
"Non-Windows"
|
||||
);
|
||||
assert_eq!(
|
||||
(word_cfg("unix") & word_cfg("windows")).render_short_html(),
|
||||
"Unix and Windows"
|
||||
);
|
||||
assert_eq!(
|
||||
(word_cfg("unix") | word_cfg("windows")).render_short_html(),
|
||||
"Unix or Windows"
|
||||
);
|
||||
assert_eq!(
|
||||
(
|
||||
word_cfg("unix") & word_cfg("windows") & word_cfg("debug_assertions")
|
||||
).render_short_html(),
|
||||
"Unix and Windows and debug-assertions enabled"
|
||||
);
|
||||
assert_eq!(
|
||||
(
|
||||
word_cfg("unix") | word_cfg("windows") | word_cfg("debug_assertions")
|
||||
).render_short_html(),
|
||||
"Unix or Windows or debug-assertions enabled"
|
||||
);
|
||||
assert_eq!(
|
||||
(
|
||||
!(word_cfg("unix") | word_cfg("windows") | word_cfg("debug_assertions"))
|
||||
).render_short_html(),
|
||||
"Neither Unix nor Windows nor debug-assertions enabled"
|
||||
);
|
||||
assert_eq!(
|
||||
(
|
||||
(word_cfg("unix") & name_value_cfg("target_arch", "x86_64")) |
|
||||
(word_cfg("windows") & name_value_cfg("target_pointer_width", "64"))
|
||||
).render_short_html(),
|
||||
"Unix and x86-64, or Windows and 64-bit"
|
||||
);
|
||||
assert_eq!(
|
||||
(!(word_cfg("unix") & word_cfg("windows"))).render_short_html(),
|
||||
"Not (Unix and Windows)"
|
||||
);
|
||||
assert_eq!(
|
||||
(
|
||||
(word_cfg("debug_assertions") | word_cfg("windows")) & word_cfg("unix")
|
||||
).render_short_html(),
|
||||
"(Debug-assertions enabled or Windows) and Unix"
|
||||
);
|
||||
})
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_render_long_html() {
|
||||
assert_eq!(
|
||||
word_cfg("unix").render_long_html(),
|
||||
"This is supported on <strong>Unix</strong> only."
|
||||
);
|
||||
assert_eq!(
|
||||
name_value_cfg("target_os", "macos").render_long_html(),
|
||||
"This is supported on <strong>macOS</strong> only."
|
||||
);
|
||||
assert_eq!(
|
||||
name_value_cfg("target_pointer_width", "16").render_long_html(),
|
||||
"This is supported on <strong>16-bit</strong> only."
|
||||
);
|
||||
assert_eq!(
|
||||
name_value_cfg("target_endian", "little").render_long_html(),
|
||||
"This is supported on <strong>little-endian</strong> only."
|
||||
);
|
||||
assert_eq!(
|
||||
(!word_cfg("windows")).render_long_html(),
|
||||
"This is supported on <strong>non-Windows</strong> only."
|
||||
);
|
||||
assert_eq!(
|
||||
(word_cfg("unix") & word_cfg("windows")).render_long_html(),
|
||||
"This is supported on <strong>Unix and Windows</strong> only."
|
||||
);
|
||||
assert_eq!(
|
||||
(word_cfg("unix") | word_cfg("windows")).render_long_html(),
|
||||
"This is supported on <strong>Unix or Windows</strong> only."
|
||||
);
|
||||
assert_eq!(
|
||||
(
|
||||
word_cfg("unix") & word_cfg("windows") & word_cfg("debug_assertions")
|
||||
).render_long_html(),
|
||||
"This is supported on <strong>Unix and Windows and debug-assertions enabled</strong> \
|
||||
only."
|
||||
);
|
||||
assert_eq!(
|
||||
(
|
||||
word_cfg("unix") | word_cfg("windows") | word_cfg("debug_assertions")
|
||||
).render_long_html(),
|
||||
"This is supported on <strong>Unix or Windows or debug-assertions enabled</strong> \
|
||||
only."
|
||||
);
|
||||
assert_eq!(
|
||||
(
|
||||
!(word_cfg("unix") | word_cfg("windows") | word_cfg("debug_assertions"))
|
||||
).render_long_html(),
|
||||
"This is supported on <strong>neither Unix nor Windows nor debug-assertions \
|
||||
enabled</strong>."
|
||||
);
|
||||
assert_eq!(
|
||||
(
|
||||
(word_cfg("unix") & name_value_cfg("target_arch", "x86_64")) |
|
||||
(word_cfg("windows") & name_value_cfg("target_pointer_width", "64"))
|
||||
).render_long_html(),
|
||||
"This is supported on <strong>Unix and x86-64, or Windows and 64-bit</strong> only."
|
||||
);
|
||||
assert_eq!(
|
||||
(!(word_cfg("unix") & word_cfg("windows"))).render_long_html(),
|
||||
"This is supported on <strong>not (Unix and Windows)</strong>."
|
||||
);
|
||||
assert_eq!(
|
||||
(
|
||||
(word_cfg("debug_assertions") | word_cfg("windows")) & word_cfg("unix")
|
||||
).render_long_html(),
|
||||
"This is supported on <strong>(debug-assertions enabled or Windows) and Unix</strong> \
|
||||
only."
|
||||
);
|
||||
with_globals(|| {
|
||||
assert_eq!(
|
||||
word_cfg("unix").render_long_html(),
|
||||
"This is supported on <strong>Unix</strong> only."
|
||||
);
|
||||
assert_eq!(
|
||||
name_value_cfg("target_os", "macos").render_long_html(),
|
||||
"This is supported on <strong>macOS</strong> only."
|
||||
);
|
||||
assert_eq!(
|
||||
name_value_cfg("target_pointer_width", "16").render_long_html(),
|
||||
"This is supported on <strong>16-bit</strong> only."
|
||||
);
|
||||
assert_eq!(
|
||||
name_value_cfg("target_endian", "little").render_long_html(),
|
||||
"This is supported on <strong>little-endian</strong> only."
|
||||
);
|
||||
assert_eq!(
|
||||
(!word_cfg("windows")).render_long_html(),
|
||||
"This is supported on <strong>non-Windows</strong> only."
|
||||
);
|
||||
assert_eq!(
|
||||
(word_cfg("unix") & word_cfg("windows")).render_long_html(),
|
||||
"This is supported on <strong>Unix and Windows</strong> only."
|
||||
);
|
||||
assert_eq!(
|
||||
(word_cfg("unix") | word_cfg("windows")).render_long_html(),
|
||||
"This is supported on <strong>Unix or Windows</strong> only."
|
||||
);
|
||||
assert_eq!(
|
||||
(
|
||||
word_cfg("unix") & word_cfg("windows") & word_cfg("debug_assertions")
|
||||
).render_long_html(),
|
||||
"This is supported on <strong>Unix and Windows and debug-assertions enabled\
|
||||
</strong> only."
|
||||
);
|
||||
assert_eq!(
|
||||
(
|
||||
word_cfg("unix") | word_cfg("windows") | word_cfg("debug_assertions")
|
||||
).render_long_html(),
|
||||
"This is supported on <strong>Unix or Windows or debug-assertions enabled\
|
||||
</strong> only."
|
||||
);
|
||||
assert_eq!(
|
||||
(
|
||||
!(word_cfg("unix") | word_cfg("windows") | word_cfg("debug_assertions"))
|
||||
).render_long_html(),
|
||||
"This is supported on <strong>neither Unix nor Windows nor debug-assertions \
|
||||
enabled</strong>."
|
||||
);
|
||||
assert_eq!(
|
||||
(
|
||||
(word_cfg("unix") & name_value_cfg("target_arch", "x86_64")) |
|
||||
(word_cfg("windows") & name_value_cfg("target_pointer_width", "64"))
|
||||
).render_long_html(),
|
||||
"This is supported on <strong>Unix and x86-64, or Windows and 64-bit</strong> \
|
||||
only."
|
||||
);
|
||||
assert_eq!(
|
||||
(!(word_cfg("unix") & word_cfg("windows"))).render_long_html(),
|
||||
"This is supported on <strong>not (Unix and Windows)</strong>."
|
||||
);
|
||||
assert_eq!(
|
||||
(
|
||||
(word_cfg("debug_assertions") | word_cfg("windows")) & word_cfg("unix")
|
||||
).render_long_html(),
|
||||
"This is supported on <strong>(debug-assertions enabled or Windows) and Unix\
|
||||
</strong> only."
|
||||
);
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -102,7 +102,9 @@ pub fn main() {
|
|||
const STACK_SIZE: usize = 32_000_000; // 32MB
|
||||
env_logger::init();
|
||||
let res = std::thread::Builder::new().stack_size(STACK_SIZE).spawn(move || {
|
||||
get_args().map(|args| main_args(&args)).unwrap_or(1)
|
||||
syntax::with_globals(move || {
|
||||
get_args().map(|args| main_args(&args)).unwrap_or(1)
|
||||
})
|
||||
}).unwrap().join().unwrap_or(101);
|
||||
process::exit(res as i32);
|
||||
}
|
||||
|
|
@ -554,7 +556,8 @@ where R: 'static + Send, F: 'static + Send + FnOnce(Output) -> R {
|
|||
});
|
||||
|
||||
let (tx, rx) = channel();
|
||||
rustc_driver::monitor(move || {
|
||||
|
||||
rustc_driver::monitor(move || syntax::with_globals(move || {
|
||||
use rustc::session::config::Input;
|
||||
|
||||
let (mut krate, renderinfo) =
|
||||
|
|
@ -623,7 +626,7 @@ where R: 'static + Send, F: 'static + Send + FnOnce(Output) -> R {
|
|||
let krate = pm.run_plugins(krate);
|
||||
|
||||
tx.send(f(Output { krate: krate, renderinfo: renderinfo, passes: passes })).unwrap();
|
||||
});
|
||||
}));
|
||||
rx.recv().unwrap()
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@ use rustc_resolve::MakeGlobMap;
|
|||
use syntax::ast;
|
||||
use syntax::codemap::CodeMap;
|
||||
use syntax::feature_gate::UnstableFeatures;
|
||||
use syntax::with_globals;
|
||||
use syntax_pos::{BytePos, DUMMY_SP, Pos, Span, FileName};
|
||||
use errors;
|
||||
use errors::emitter::ColorConfig;
|
||||
|
|
@ -518,7 +519,7 @@ impl Collector {
|
|||
let panic = io::set_panic(None);
|
||||
let print = io::set_print(None);
|
||||
match {
|
||||
rustc_driver::in_rustc_thread(move || {
|
||||
rustc_driver::in_rustc_thread(move || with_globals(move || {
|
||||
io::set_panic(panic);
|
||||
io::set_print(print);
|
||||
run_test(&test,
|
||||
|
|
@ -536,7 +537,7 @@ impl Collector {
|
|||
&opts,
|
||||
maybe_sysroot,
|
||||
linker)
|
||||
})
|
||||
}))
|
||||
} {
|
||||
Ok(()) => (),
|
||||
Err(err) => panic::resume_unwind(err),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue