add unstable_features to ParseSess
This commit is contained in:
parent
b0dba7439d
commit
6d09d8d7d9
@ -36,6 +36,7 @@
|
||||
use parse::token::InternedString;
|
||||
|
||||
use std::ascii::AsciiExt;
|
||||
use std::env;
|
||||
|
||||
macro_rules! setter {
|
||||
($field: ident) => {{
|
||||
@ -1296,6 +1297,23 @@ pub enum UnstableFeatures {
|
||||
Cheat
|
||||
}
|
||||
|
||||
impl UnstableFeatures {
|
||||
pub fn from_environment() -> UnstableFeatures {
|
||||
// Whether this is a feature-staged build, i.e. on the beta or stable channel
|
||||
let disable_unstable_features = option_env!("CFG_DISABLE_UNSTABLE_FEATURES").is_some();
|
||||
// The secret key needed to get through the rustc build itself by
|
||||
// subverting the unstable features lints
|
||||
let bootstrap_secret_key = option_env!("CFG_BOOTSTRAP_KEY");
|
||||
// The matching key to the above, only known by the build system
|
||||
let bootstrap_provided_key = env::var("RUSTC_BOOTSTRAP_KEY").ok();
|
||||
match (disable_unstable_features, bootstrap_secret_key, bootstrap_provided_key) {
|
||||
(_, Some(ref s), Some(ref p)) if s == p => UnstableFeatures::Cheat,
|
||||
(true, _, _) => UnstableFeatures::Disallow,
|
||||
(false, _, _) => UnstableFeatures::Allow
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn maybe_stage_features(span_handler: &Handler, krate: &ast::Crate,
|
||||
unstable: UnstableFeatures) {
|
||||
let allow_features = match unstable {
|
||||
|
@ -14,6 +14,7 @@
|
||||
use codemap::CodeMap;
|
||||
use syntax_pos::{self, Span, FileMap};
|
||||
use errors::{Handler, ColorConfig, DiagnosticBuilder};
|
||||
use feature_gate::UnstableFeatures;
|
||||
use parse::parser::Parser;
|
||||
use parse::token::InternedString;
|
||||
use ptr::P;
|
||||
@ -42,6 +43,7 @@
|
||||
/// Info about a parsing session.
|
||||
pub struct ParseSess {
|
||||
pub span_diagnostic: Handler, // better be the same as the one in the reader!
|
||||
pub unstable_features: UnstableFeatures,
|
||||
/// Used to determine and report recursive mod inclusions
|
||||
included_mod_stack: RefCell<Vec<PathBuf>>,
|
||||
code_map: Rc<CodeMap>,
|
||||
@ -60,6 +62,7 @@ pub fn new() -> ParseSess {
|
||||
pub fn with_span_handler(handler: Handler, code_map: Rc<CodeMap>) -> ParseSess {
|
||||
ParseSess {
|
||||
span_diagnostic: handler,
|
||||
unstable_features: UnstableFeatures::from_environment(),
|
||||
included_mod_stack: RefCell::new(vec![]),
|
||||
code_map: code_map
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user