diff options
| author | Josh Stone <jistone@redhat.com> | 2020-08-07 20:50:53 -0700 |
|---|---|---|
| committer | Josh Stone <jistone@redhat.com> | 2020-08-09 12:25:22 -0700 |
| commit | 7d1547d3009cac6edea086bd3e356054275b3e45 (patch) | |
| tree | c4b0501d8eb41908933021b2917a94033aa1a0ec | |
| parent | 4efc7e92fa29f550f0825f290c048a55515ce98f (diff) | |
| download | rust-7d1547d3009cac6edea086bd3e356054275b3e45.tar.gz rust-7d1547d3009cac6edea086bd3e356054275b3e45.zip | |
rustc_span: use IndexSet in SpanInterner
| -rw-r--r-- | src/librustc_span/span_encoding.rs | 17 |
1 files changed, 5 insertions, 12 deletions
diff --git a/src/librustc_span/span_encoding.rs b/src/librustc_span/span_encoding.rs index 6b672d344fa..b05e01d666b 100644 --- a/src/librustc_span/span_encoding.rs +++ b/src/librustc_span/span_encoding.rs @@ -8,7 +8,7 @@ use crate::hygiene::SyntaxContext; use crate::SESSION_GLOBALS; use crate::{BytePos, SpanData}; -use rustc_data_structures::fx::FxHashMap; +use rustc_data_structures::fx::FxIndexSet; /// A compressed span. /// @@ -111,25 +111,18 @@ impl Span { #[derive(Default)] pub struct SpanInterner { - spans: FxHashMap<SpanData, u32>, - span_data: Vec<SpanData>, + spans: FxIndexSet<SpanData>, } impl SpanInterner { fn intern(&mut self, span_data: &SpanData) -> u32 { - if let Some(index) = self.spans.get(span_data) { - return *index; - } - - let index = self.spans.len() as u32; - self.span_data.push(*span_data); - self.spans.insert(*span_data, index); - index + let (index, _) = self.spans.insert_full(*span_data); + index as u32 } #[inline] fn get(&self, index: u32) -> &SpanData { - &self.span_data[index as usize] + &self.spans[index as usize] } } |
