diff options
| author | Nick Cameron <ncameron@mozilla.com> | 2014-07-25 14:44:24 +1200 |
|---|---|---|
| committer | Nick Cameron <ncameron@mozilla.com> | 2014-09-17 16:53:20 +1200 |
| commit | 520671f1500885ffc2c5096e9150a665b63c2e0d (patch) | |
| tree | 5ed7ce68faaa724c8c6655f4edc325aa533239d6 /src/libsyntax/parse | |
| parent | b75b0f79235c919b3ab959fb79247d2997bd63e0 (diff) | |
| download | rust-520671f1500885ffc2c5096e9150a665b63c2e0d.tar.gz rust-520671f1500885ffc2c5096e9150a665b63c2e0d.zip | |
move most of front to libsyntax
Diffstat (limited to 'src/libsyntax/parse')
| -rw-r--r-- | src/libsyntax/parse/mod.rs | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/libsyntax/parse/mod.rs b/src/libsyntax/parse/mod.rs index e5b6359000b..506b607d02c 100644 --- a/src/libsyntax/parse/mod.rs +++ b/src/libsyntax/parse/mod.rs @@ -37,12 +37,14 @@ 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<Path>>, + pub node_id: Cell<ast::NodeId>, } pub fn new_parse_sess() -> ParseSess { ParseSess { span_diagnostic: mk_span_handler(default_handler(Auto, None), CodeMap::new()), included_mod_stack: RefCell::new(Vec::new()), + node_id: Cell::new(1), } } @@ -50,6 +52,23 @@ 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 => fail!("Input too large, ran out of node ids!") + } + + v } } |
