about summary refs log tree commit diff
diff options
context:
space:
mode:
authorNicholas Nethercote <nnethercote@mozilla.com>2019-06-01 07:19:58 +1000
committerNicholas Nethercote <nnethercote@mozilla.com>2019-06-05 07:43:14 +1000
commit0ba36ea7c1d67d852b5f68a186c338ac8e54c7fc (patch)
treef72f640696e897b9aee71bbf40bf3919cb034307
parent8797e8cabdd47d1731bbd12099d0cd5503d22d76 (diff)
downloadrust-0ba36ea7c1d67d852b5f68a186c338ac8e54c7fc.tar.gz
rust-0ba36ea7c1d67d852b5f68a186c338ac8e54c7fc.zip
Add some useful methods to `HygieneData`.
-rw-r--r--src/libsyntax_pos/hygiene.rs38
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]