diff options
| author | bors <bors@rust-lang.org> | 2023-04-23 09:13:33 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2023-04-23 09:13:33 +0000 |
| commit | f12a7fa00fb7a99a92661bb9ae2b768dac0c5d40 (patch) | |
| tree | 9df2ba88e059c98e0a360d129611a5f930694df5 | |
| parent | 9de7d9169c6f2208c544a3d4a170719360cae58c (diff) | |
| parent | 99962a841831469fbb7a06ccc5a9c9766d052234 (diff) | |
| download | rust-f12a7fa00fb7a99a92661bb9ae2b768dac0c5d40.tar.gz rust-f12a7fa00fb7a99a92661bb9ae2b768dac0c5d40.zip | |
Auto merge of #110497 - cjgillot:span-ctxt, r=b-naber
Refactor `SyntaxContext::ctxt` logic. I'm still trying to make a test from the issue. cc `@deepink-mas` does this solve the issue? Fixes https://github.com/rust-lang/rust/issues/110230
| -rw-r--r-- | compiler/rustc_span/src/span_encoding.rs | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/compiler/rustc_span/src/span_encoding.rs b/compiler/rustc_span/src/span_encoding.rs index c600298c51a..1eea0f63ca0 100644 --- a/compiler/rustc_span/src/span_encoding.rs +++ b/compiler/rustc_span/src/span_encoding.rs @@ -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() } } } |
