diff options
| -rw-r--r-- | src/librustc/session/mod.rs | 18 | ||||
| -rw-r--r-- | src/libsyntax/parse/mod.rs | 21 |
2 files changed, 15 insertions, 24 deletions
diff --git a/src/librustc/session/mod.rs b/src/librustc/session/mod.rs index 7a8ce1bf48e..d2b0ba70367 100644 --- a/src/librustc/session/mod.rs +++ b/src/librustc/session/mod.rs @@ -64,7 +64,9 @@ pub struct Session { /// operations such as auto-dereference and monomorphization. pub recursion_limit: Cell<usize>, - pub can_print_warnings: bool + pub can_print_warnings: bool, + + next_node_id: Cell<ast::NodeId> } impl Session { @@ -213,10 +215,17 @@ impl Session { lints.insert(id, vec!((lint_id, sp, msg))); } pub fn next_node_id(&self) -> ast::NodeId { - self.parse_sess.next_node_id() + self.reserve_node_ids(1) } pub fn reserve_node_ids(&self, count: ast::NodeId) -> ast::NodeId { - self.parse_sess.reserve_node_ids(count) + let id = self.next_node_id.get(); + + match id.checked_add(count) { + Some(next) => self.next_node_id.set(next), + None => self.bug("Input too large, ran out of node ids!") + } + + id } pub fn diagnostic<'a>(&'a self) -> &'a diagnostic::SpanHandler { &self.parse_sess.span_diagnostic @@ -421,7 +430,8 @@ pub fn build_session_(sopts: config::Options, delayed_span_bug: RefCell::new(None), features: RefCell::new(feature_gate::Features::new()), recursion_limit: Cell::new(64), - can_print_warnings: can_print_warnings + can_print_warnings: can_print_warnings, + next_node_id: Cell::new(1) }; sess diff --git a/src/libsyntax/parse/mod.rs b/src/libsyntax/parse/mod.rs index 8c9ce5f78d4..e207b197e83 100644 --- a/src/libsyntax/parse/mod.rs +++ b/src/libsyntax/parse/mod.rs @@ -18,7 +18,7 @@ use parse::parser::Parser; use ptr::P; use str::char_at; -use std::cell::{Cell, RefCell}; +use std::cell::RefCell; use std::fs::File; use std::io::Read; use std::iter; @@ -44,14 +44,12 @@ pub struct ParseSess { pub span_diagnostic: SpanHandler, // better be the same as the one in the reader! /// Used to determine and report recursive mod inclusions included_mod_stack: RefCell<Vec<PathBuf>>, - pub node_id: Cell<ast::NodeId>, } pub fn new_parse_sess() -> ParseSess { ParseSess { span_diagnostic: mk_span_handler(default_handler(Auto, None, true), CodeMap::new()), included_mod_stack: RefCell::new(Vec::new()), - node_id: Cell::new(1), } } @@ -59,23 +57,6 @@ pub fn new_parse_sess_special_handler(sh: SpanHandler) -> ParseSess { ParseSess { span_diagnostic: sh, included_mod_stack: RefCell::new(Vec::new()), - node_id: Cell::new(1), - } -} - -impl ParseSess { - pub fn next_node_id(&self) -> ast::NodeId { - self.reserve_node_ids(1) - } - pub fn reserve_node_ids(&self, count: ast::NodeId) -> ast::NodeId { - let v = self.node_id.get(); - - match v.checked_add(count) { - Some(next) => { self.node_id.set(next); } - None => panic!("Input too large, ran out of node ids!") - } - - v } } |
