add unstable_features to ParseSess
This commit is contained in:
parent
b0dba7439d
commit
6d09d8d7d9
@ -36,6 +36,7 @@ use parse::ParseSess;
|
|||||||
use parse::token::InternedString;
|
use parse::token::InternedString;
|
||||||
|
|
||||||
use std::ascii::AsciiExt;
|
use std::ascii::AsciiExt;
|
||||||
|
use std::env;
|
||||||
|
|
||||||
macro_rules! setter {
|
macro_rules! setter {
|
||||||
($field: ident) => {{
|
($field: ident) => {{
|
||||||
@ -1296,6 +1297,23 @@ pub enum UnstableFeatures {
|
|||||||
Cheat
|
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,
|
fn maybe_stage_features(span_handler: &Handler, krate: &ast::Crate,
|
||||||
unstable: UnstableFeatures) {
|
unstable: UnstableFeatures) {
|
||||||
let allow_features = match unstable {
|
let allow_features = match unstable {
|
||||||
|
@ -14,6 +14,7 @@ use ast;
|
|||||||
use codemap::CodeMap;
|
use codemap::CodeMap;
|
||||||
use syntax_pos::{self, Span, FileMap};
|
use syntax_pos::{self, Span, FileMap};
|
||||||
use errors::{Handler, ColorConfig, DiagnosticBuilder};
|
use errors::{Handler, ColorConfig, DiagnosticBuilder};
|
||||||
|
use feature_gate::UnstableFeatures;
|
||||||
use parse::parser::Parser;
|
use parse::parser::Parser;
|
||||||
use parse::token::InternedString;
|
use parse::token::InternedString;
|
||||||
use ptr::P;
|
use ptr::P;
|
||||||
@ -42,6 +43,7 @@ pub mod obsolete;
|
|||||||
/// Info about a parsing session.
|
/// Info about a parsing session.
|
||||||
pub struct ParseSess {
|
pub struct ParseSess {
|
||||||
pub span_diagnostic: Handler, // better be the same as the one in the reader!
|
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
|
/// Used to determine and report recursive mod inclusions
|
||||||
included_mod_stack: RefCell<Vec<PathBuf>>,
|
included_mod_stack: RefCell<Vec<PathBuf>>,
|
||||||
code_map: Rc<CodeMap>,
|
code_map: Rc<CodeMap>,
|
||||||
@ -60,6 +62,7 @@ impl ParseSess {
|
|||||||
pub fn with_span_handler(handler: Handler, code_map: Rc<CodeMap>) -> ParseSess {
|
pub fn with_span_handler(handler: Handler, code_map: Rc<CodeMap>) -> ParseSess {
|
||||||
ParseSess {
|
ParseSess {
|
||||||
span_diagnostic: handler,
|
span_diagnostic: handler,
|
||||||
|
unstable_features: UnstableFeatures::from_environment(),
|
||||||
included_mod_stack: RefCell::new(vec![]),
|
included_mod_stack: RefCell::new(vec![]),
|
||||||
code_map: code_map
|
code_map: code_map
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user