Skip to content

Commit

Permalink
Rollup merge of rust-lang#110497 - cjgillot:span-ctxt, r=b-naber
Browse files Browse the repository at this point in the history
Refactor `SyntaxContext::ctxt` logic.

I'm still trying to make a test from the issue.

cc `@deepink-mas` does this solve the issue?

Fixes rust-lang#110230
  • Loading branch information
matthiaskrgr authored Apr 22, 2023
2 parents ccb6290 + 99962a8 commit 0f97b73
Showing 1 changed file with 14 additions and 10 deletions.
24 changes: 14 additions & 10 deletions compiler/rustc_span/src/span_encoding.rs
Original file line number Diff line number Diff line change
Expand Up @@ -181,19 +181,23 @@ impl Span {
#[inline]
pub fn ctxt(self) -> SyntaxContext {
let ctxt_or_tag = self.ctxt_or_tag as u32;
if ctxt_or_tag <= MAX_CTXT {
if self.len_or_tag == LEN_TAG || self.len_or_tag & PARENT_MASK == 0 {
// Inline format or interned format with inline ctxt.
SyntaxContext::from_u32(ctxt_or_tag)
// Check for interned format.
if self.len_or_tag == LEN_TAG {
if ctxt_or_tag == CTXT_TAG {
// Fully interned format.
let index = self.base_or_index;
with_span_interner(|interner| interner.spans[index as usize].ctxt)
} else {
// Inline format or interned format with inline parent.
// We know that the SyntaxContext is root.
SyntaxContext::root()
// Interned format with inline ctxt.
SyntaxContext::from_u32(ctxt_or_tag)
}
} else if self.len_or_tag & PARENT_MASK == 0 {
// Inline format with inline ctxt.
SyntaxContext::from_u32(ctxt_or_tag)
} else {
// Interned format.
let index = self.base_or_index;
with_span_interner(|interner| interner.spans[index as usize].ctxt)
// Inline format with inline parent.
// We know that the SyntaxContext is root.
SyntaxContext::root()
}
}
}
Expand Down

0 comments on commit 0f97b73

Please sign in to comment.