From e396f992558746689e1d562c5a6bb0b92bf70b93 Mon Sep 17 00:00:00 2001 From: Nicholas Nethercote Date: Thu, 23 May 2019 17:47:53 +1000 Subject: [PATCH] Don't arena-allocate static symbols. It's just a waste of memory. This also gets rid of the special case for "". --- src/libsyntax_pos/symbol.rs | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/src/libsyntax_pos/symbol.rs b/src/libsyntax_pos/symbol.rs index b1e1a056db4ad..26422e891c536 100644 --- a/src/libsyntax_pos/symbol.rs +++ b/src/libsyntax_pos/symbol.rs @@ -866,20 +866,13 @@ pub struct Interner { } impl Interner { - fn prefill(init: &[&str]) -> Self { - let mut this = Interner::default(); - this.names.reserve(init.len()); - this.strings.reserve(init.len()); - - // We can't allocate empty strings in the arena, so handle this here. - assert!(kw::Invalid.as_u32() == 0 && init[0].is_empty()); - this.names.insert("", kw::Invalid); - this.strings.push(""); - - for string in &init[1..] { - this.intern(string); + fn prefill(init: &[&'static str]) -> Self { + let symbols = (0 .. init.len() as u32).map(Symbol::new); + Interner { + strings: init.to_vec(), + names: init.iter().copied().zip(symbols).collect(), + ..Default::default() } - this } pub fn intern(&mut self, string: &str) -> Symbol {