Skip to content

Commit 0ba36ea

Browse files
committed
Add some useful methods to HygieneData.
1 parent 8797e8c commit 0ba36ea

File tree

1 file changed

+28
-10
lines changed

1 file changed

+28
-10
lines changed

src/libsyntax_pos/hygiene.rs

Lines changed: 28 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -200,10 +200,6 @@ impl HygieneData {
200200
GLOBALS.with(|globals| f(&mut *globals.hygiene_data.borrow_mut()))
201201
}
202202

203-
fn outer(&self, ctxt: SyntaxContext) -> Mark {
204-
self.syntax_contexts[ctxt.0 as usize].outer_mark
205-
}
206-
207203
fn expn_info(&self, mark: Mark) -> Option<ExpnInfo> {
208204
self.marks[mark.0 as usize].expn_info.clone()
209205
}
@@ -217,6 +213,26 @@ impl HygieneData {
217213
}
218214
true
219215
}
216+
217+
fn modern(&self, ctxt: SyntaxContext) -> SyntaxContext {
218+
self.syntax_contexts[ctxt.0 as usize].opaque
219+
}
220+
221+
fn modern_and_legacy(&self, ctxt: SyntaxContext) -> SyntaxContext {
222+
self.syntax_contexts[ctxt.0 as usize].opaque_and_semitransparent
223+
}
224+
225+
fn outer(&self, ctxt: SyntaxContext) -> Mark {
226+
self.syntax_contexts[ctxt.0 as usize].outer_mark
227+
}
228+
229+
fn transparency(&self, ctxt: SyntaxContext) -> Transparency {
230+
self.syntax_contexts[ctxt.0 as usize].transparency
231+
}
232+
233+
fn prev_ctxt(&self, ctxt: SyntaxContext) -> SyntaxContext {
234+
self.syntax_contexts[ctxt.0 as usize].prev_ctxt
235+
}
220236
}
221237

222238
pub fn clear_markings() {
@@ -388,7 +404,7 @@ impl SyntaxContext {
388404
pub fn remove_mark(&mut self) -> Mark {
389405
HygieneData::with(|data| {
390406
let outer_mark = data.syntax_contexts[self.0 as usize].outer_mark;
391-
*self = data.syntax_contexts[self.0 as usize].prev_ctxt;
407+
*self = data.prev_ctxt(*self);
392408
outer_mark
393409
})
394410
}
@@ -397,9 +413,11 @@ impl SyntaxContext {
397413
HygieneData::with(|data| {
398414
let mut marks = Vec::new();
399415
while self != SyntaxContext::empty() {
400-
let ctxt_data = &data.syntax_contexts[self.0 as usize];
401-
marks.push((ctxt_data.outer_mark, ctxt_data.transparency));
402-
self = ctxt_data.prev_ctxt;
416+
let outer_mark = data.outer(self);
417+
let transparency = data.transparency(self);
418+
let prev_ctxt = data.prev_ctxt(self);
419+
marks.push((outer_mark, transparency));
420+
self = prev_ctxt;
403421
}
404422
marks.reverse();
405423
marks
@@ -506,12 +524,12 @@ impl SyntaxContext {
506524

507525
#[inline]
508526
pub fn modern(self) -> SyntaxContext {
509-
HygieneData::with(|data| data.syntax_contexts[self.0 as usize].opaque)
527+
HygieneData::with(|data| data.modern(self))
510528
}
511529

512530
#[inline]
513531
pub fn modern_and_legacy(self) -> SyntaxContext {
514-
HygieneData::with(|data| data.syntax_contexts[self.0 as usize].opaque_and_semitransparent)
532+
HygieneData::with(|data| data.modern_and_legacy(self))
515533
}
516534

517535
#[inline]

0 commit comments

Comments
 (0)