diff options
| author | bors <bors@rust-lang.org> | 2019-05-20 03:36:43 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2019-05-20 03:36:43 +0000 |
| commit | caef1e833fbd9de740d521114d716a11a29b71cb (patch) | |
| tree | 8ac73905ed5b00247210323b5ef501c119d0bf97 /src/libsyntax_pos | |
| parent | 128b4c8035fc788b78157d4e1975cda0f25ce599 (diff) | |
| parent | c06cdbeac55ec87181d015d2ef759349521773ea (diff) | |
| download | rust-caef1e833fbd9de740d521114d716a11a29b71cb.tar.gz rust-caef1e833fbd9de740d521114d716a11a29b71cb.zip | |
Auto merge of #60815 - nnethercote:use-Symbol-more-2, r=petrochenkov
Use `Symbol` even more These patches simplify the code a bit (fewer conversions) and also speed things up a bit (fewer `with_interner` calls). r? @petrochenkov
Diffstat (limited to 'src/libsyntax_pos')
| -rw-r--r-- | src/libsyntax_pos/symbol.rs | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/src/libsyntax_pos/symbol.rs b/src/libsyntax_pos/symbol.rs index 97b22282668..aa9028d4a6b 100644 --- a/src/libsyntax_pos/symbol.rs +++ b/src/libsyntax_pos/symbol.rs @@ -1036,6 +1036,17 @@ pub struct LocalInternedString { } impl LocalInternedString { + /// Maps a string to its interned representation. + pub fn intern(string: &str) -> Self { + let string = with_interner(|interner| { + let symbol = interner.intern(string); + interner.strings[symbol.0.as_usize()] + }); + LocalInternedString { + string: unsafe { std::mem::transmute::<&str, &str>(string) } + } + } + pub fn as_interned_str(self) -> InternedString { InternedString { symbol: Symbol::intern(self.string) @@ -1112,7 +1123,7 @@ impl fmt::Display for LocalInternedString { impl Decodable for LocalInternedString { fn decode<D: Decoder>(d: &mut D) -> Result<LocalInternedString, D::Error> { - Ok(Symbol::intern(&d.read_str()?).as_str()) + Ok(LocalInternedString::intern(&d.read_str()?)) } } @@ -1141,6 +1152,13 @@ pub struct InternedString { } impl InternedString { + /// Maps a string to its interned representation. + pub fn intern(string: &str) -> Self { + InternedString { + symbol: Symbol::intern(string) + } + } + pub fn with<F: FnOnce(&str) -> R, R>(self, f: F) -> R { let str = with_interner(|interner| { interner.get(self.symbol) as *const str @@ -1243,7 +1261,7 @@ impl fmt::Display for InternedString { impl Decodable for InternedString { fn decode<D: Decoder>(d: &mut D) -> Result<InternedString, D::Error> { - Ok(Symbol::intern(&d.read_str()?).as_interned_str()) + Ok(InternedString::intern(&d.read_str()?)) } } |
