about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJosh Stone <jistone@redhat.com>2020-08-07 20:50:53 -0700
committerJosh Stone <jistone@redhat.com>2020-08-09 12:25:22 -0700
commit7d1547d3009cac6edea086bd3e356054275b3e45 (patch)
treec4b0501d8eb41908933021b2917a94033aa1a0ec
parent4efc7e92fa29f550f0825f290c048a55515ce98f (diff)
downloadrust-7d1547d3009cac6edea086bd3e356054275b3e45.tar.gz
rust-7d1547d3009cac6edea086bd3e356054275b3e45.zip
rustc_span: use IndexSet in SpanInterner
-rw-r--r--src/librustc_span/span_encoding.rs17
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]
     }
 }