提交 6d09d8d7 编写于 作者: T Tim Neumann

add unstable_features to ParseSess

上级 b0dba743
...@@ -36,6 +36,7 @@ ...@@ -36,6 +36,7 @@
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 { ...@@ -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 @@ ...@@ -14,6 +14,7 @@
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 @@ ...@@ -42,6 +43,7 @@
/// 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 @@ pub fn new() -> ParseSess { ...@@ -60,6 +62,7 @@ pub fn new() -> 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
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册