diff options
| author | Nicholas Nethercote <nnethercote@mozilla.com> | 2019-06-01 07:19:58 +1000 |
|---|---|---|
| committer | Nicholas Nethercote <nnethercote@mozilla.com> | 2019-06-05 07:43:14 +1000 |
| commit | 0ba36ea7c1d67d852b5f68a186c338ac8e54c7fc (patch) | |
| tree | f72f640696e897b9aee71bbf40bf3919cb034307 | |
| parent | 8797e8cabdd47d1731bbd12099d0cd5503d22d76 (diff) | |
| download | rust-0ba36ea7c1d67d852b5f68a186c338ac8e54c7fc.tar.gz rust-0ba36ea7c1d67d852b5f68a186c338ac8e54c7fc.zip | |
Add some useful methods to `HygieneData`.
| -rw-r--r-- | src/libsyntax_pos/hygiene.rs | 38 |
1 files changed, 28 insertions, 10 deletions
diff --git a/src/libsyntax_pos/hygiene.rs b/src/libsyntax_pos/hygiene.rs index 39a7124c756..c23d27879f7 100644 --- a/src/libsyntax_pos/hygiene.rs +++ b/src/libsyntax_pos/hygiene.rs @@ -200,10 +200,6 @@ impl HygieneData { GLOBALS.with(|globals| f(&mut *globals.hygiene_data.borrow_mut())) } - fn outer(&self, ctxt: SyntaxContext) -> Mark { - self.syntax_contexts[ctxt.0 as usize].outer_mark - } - fn expn_info(&self, mark: Mark) -> Option<ExpnInfo> { self.marks[mark.0 as usize].expn_info.clone() } @@ -217,6 +213,26 @@ impl HygieneData { } true } + + fn modern(&self, ctxt: SyntaxContext) -> SyntaxContext { + self.syntax_contexts[ctxt.0 as usize].opaque + } + + fn modern_and_legacy(&self, ctxt: SyntaxContext) -> SyntaxContext { + self.syntax_contexts[ctxt.0 as usize].opaque_and_semitransparent + } + + fn outer(&self, ctxt: SyntaxContext) -> Mark { + self.syntax_contexts[ctxt.0 as usize].outer_mark + } + + fn transparency(&self, ctxt: SyntaxContext) -> Transparency { + self.syntax_contexts[ctxt.0 as usize].transparency + } + + fn prev_ctxt(&self, ctxt: SyntaxContext) -> SyntaxContext { + self.syntax_contexts[ctxt.0 as usize].prev_ctxt + } } pub fn clear_markings() { @@ -388,7 +404,7 @@ impl SyntaxContext { pub fn remove_mark(&mut self) -> Mark { HygieneData::with(|data| { let outer_mark = data.syntax_contexts[self.0 as usize].outer_mark; - *self = data.syntax_contexts[self.0 as usize].prev_ctxt; + *self = data.prev_ctxt(*self); outer_mark }) } @@ -397,9 +413,11 @@ impl SyntaxContext { HygieneData::with(|data| { let mut marks = Vec::new(); while self != SyntaxContext::empty() { - let ctxt_data = &data.syntax_contexts[self.0 as usize]; - marks.push((ctxt_data.outer_mark, ctxt_data.transparency)); - self = ctxt_data.prev_ctxt; + let outer_mark = data.outer(self); + let transparency = data.transparency(self); + let prev_ctxt = data.prev_ctxt(self); + marks.push((outer_mark, transparency)); + self = prev_ctxt; } marks.reverse(); marks @@ -506,12 +524,12 @@ impl SyntaxContext { #[inline] pub fn modern(self) -> SyntaxContext { - HygieneData::with(|data| data.syntax_contexts[self.0 as usize].opaque) + HygieneData::with(|data| data.modern(self)) } #[inline] pub fn modern_and_legacy(self) -> SyntaxContext { - HygieneData::with(|data| data.syntax_contexts[self.0 as usize].opaque_and_semitransparent) + HygieneData::with(|data| data.modern_and_legacy(self)) } #[inline] |
