From acf55fad81d3284753abd39067d202751fe57700 Mon Sep 17 00:00:00 2001 From: Mike Gerwitz Date: Wed, 29 Sep 2021 23:27:46 -0400 Subject: [PATCH] tamer: Intern desc from xmle on read The new xmle writer was having to intern before write, which did not make sense. This continues with consistently using symbols throughout the system, and is a smaller size than `String` as a bonus. --- tamer/src/ir/asg/base.rs | 12 ++++++------ tamer/src/ir/asg/object.rs | 6 +++--- tamer/src/ir/legacyir.rs | 2 +- tamer/src/obj/xmle/writer/xmle.rs | 4 ++-- tamer/src/obj/xmle/xir.rs | 15 +++++---------- tamer/src/obj/xmlo/reader/mod.rs | 5 ++--- tamer/src/obj/xmlo/reader/test.rs | 2 +- 7 files changed, 20 insertions(+), 26 deletions(-) diff --git a/tamer/src/ir/asg/base.rs b/tamer/src/ir/asg/base.rs index 31d8c648..0b945b19 100644 --- a/tamer/src/ir/asg/base.rs +++ b/tamer/src/ir/asg/base.rs @@ -520,7 +520,7 @@ mod test { syma, IdentKind::Meta, Source { - desc: Some("a".to_string()), + desc: Some("a".into()), ..Default::default() }, )?; @@ -529,7 +529,7 @@ mod test { symb, IdentKind::Worksheet, Source { - desc: Some("b".to_string()), + desc: Some("b".into()), ..Default::default() }, )?; @@ -541,7 +541,7 @@ mod test { Some(( IdentKind::Meta, Source { - desc: Some("a".to_string()), + desc: Some("a".into()), ..Default::default() }, )), @@ -553,7 +553,7 @@ mod test { Some(( IdentKind::Worksheet, Source { - desc: Some("b".to_string()), + desc: Some("b".into()), ..Default::default() }, )), @@ -567,7 +567,7 @@ mod test { fn lookup_by_symbol() -> AsgResult<()> { let mut sut = Sut::new(); - let sym = "lookup".intern(); + let sym = "lookup".into(); let node = sut.declare( sym, IdentKind::Meta, @@ -586,7 +586,7 @@ mod test { fn declare_returns_existing() -> AsgResult<()> { let mut sut = Sut::new(); - let sym = "symdup".intern(); + let sym = "symdup".into(); let src = Source::default(); let node = sut.declare(sym, IdentKind::Meta, src.clone())?; diff --git a/tamer/src/ir/asg/object.rs b/tamer/src/ir/asg/object.rs index 1c93fcde..94ba621b 100644 --- a/tamer/src/ir/asg/object.rs +++ b/tamer/src/ir/asg/object.rs @@ -635,7 +635,7 @@ pub struct Source { /// /// This is used primarily by [`IdentKind::Class`] and /// [`IdentKind::Gen`]. - pub desc: Option, + pub desc: Option, /// Whether this identifier was generated by the compiler. /// @@ -1664,7 +1664,7 @@ mod test { generated: true, parent: Some(psym), yields: Some(ysym), - desc: Some("sym desc".to_string()), + desc: Some("sym desc".into()), from: Some(vec![fsym]), virtual_: true, override_: true, @@ -1678,7 +1678,7 @@ mod test { generated: attrs.generated, parent: attrs.parent, yields: attrs.yields, - desc: Some("sym desc".to_string()), + desc: Some("sym desc".into()), from: Some(vec![fsym]), virtual_: true, override_: true, diff --git a/tamer/src/ir/legacyir.rs b/tamer/src/ir/legacyir.rs index 6ca91228..62875190 100644 --- a/tamer/src/ir/legacyir.rs +++ b/tamer/src/ir/legacyir.rs @@ -149,7 +149,7 @@ pub struct SymAttrs { /// User-friendly identifier description. /// /// This is used primarily by [`SymType::Class`] and [`SymType::Gen`]. - pub desc: Option, + pub desc: Option, /// Related identifiers. /// diff --git a/tamer/src/obj/xmle/writer/xmle.rs b/tamer/src/obj/xmle/writer/xmle.rs index 5dd8797b..1c140551 100644 --- a/tamer/src/obj/xmle/writer/xmle.rs +++ b/tamer/src/obj/xmle/writer/xmle.rs @@ -276,7 +276,7 @@ impl XmleWriter { attrs.push(("yields", yields)); } if let Some(desc) = &src.desc { - attrs.push(("desc", &desc)); + attrs.push(("desc", desc.lookup_str().as_str())); } let sym = BytesStart::owned_name(b"preproc:sym".to_vec()) @@ -649,7 +649,7 @@ mod test { generated: true, parent: Some(psym), yields: Some(ysym), - desc: Some("sym desc".to_string()), + desc: Some("sym desc".into()), from: Some(vec![fsym]), virtual_: true, ..Default::default() diff --git a/tamer/src/obj/xmle/xir.rs b/tamer/src/obj/xmle/xir.rs index 628f81fc..be73ec56 100644 --- a/tamer/src/obj/xmle/xir.rs +++ b/tamer/src/obj/xmle/xir.rs @@ -25,7 +25,7 @@ use crate::{ xir::{AttrValue, QName, Token}, }, ld::LSPAN, - sym::{st::*, GlobalSymbolIntern, SymbolId}, + sym::{st::*, SymbolId}, }; use arrayvec::ArrayVec; use std::array; @@ -121,12 +121,7 @@ impl<'a, T: IdentObjectData> DepListIter<'a, T> { false => None, }); - // TODO: interning ought to be done during read, not by us - self.toks_push_attr( - QN_DESC, - src.desc.as_ref().map(|s| GlobalSymbolIntern::clone_uninterned(s.as_ref())) - ); - + self.toks_push_attr(QN_DESC, src.desc); self.toks_push_attr(QN_YIELDS, src.yields); self.toks_push_attr(QN_PARENT, src.parent); self.toks_push_attr(QN_NAME, Some(sym)); @@ -221,7 +216,7 @@ pub mod test { tree::{parser_from, Attr}, }, }; - use crate::sym::GlobalSymbolResolve; + use crate::sym::{GlobalSymbolIntern, GlobalSymbolResolve}; type TestResult = Result<(), Box>; @@ -265,7 +260,7 @@ pub mod test { "a".intern(), IdentKind::Meta, Source { - desc: Some(String::from("test desc")), + desc: Some("test desc".intern()), ..Default::default() }, ), @@ -381,7 +376,7 @@ pub mod test { .and_then(|a| a.value_atom()) { Some(AttrValue::Escaped(given)) => { - assert_eq!(desc, &given.lookup_str() as &str); + assert_eq!(desc.lookup_str(), given.lookup_str()); } invalid => panic!("unexpected desc: {:?}", invalid), } diff --git a/tamer/src/obj/xmlo/reader/mod.rs b/tamer/src/obj/xmlo/reader/mod.rs index 20c1e563..179b562e 100644 --- a/tamer/src/obj/xmlo/reader/mod.rs +++ b/tamer/src/obj/xmlo/reader/mod.rs @@ -464,9 +464,8 @@ where } b"desc" => { - sym_attrs.desc = Some(unsafe { - String::from_utf8_unchecked(attr.value.to_vec()) - }); + sym_attrs.desc = + Some(unsafe { attr.value.intern_utf8_unchecked() }); } b"virtual" => { diff --git a/tamer/src/obj/xmlo/reader/test.rs b/tamer/src/obj/xmlo/reader/test.rs index cf473e78..b5a34cb5 100644 --- a/tamer/src/obj/xmlo/reader/test.rs +++ b/tamer/src/obj/xmlo/reader/test.rs @@ -770,7 +770,7 @@ sym_tests! { } desc: [desc="Description"] => SymAttrs { - desc: Some("Description".to_string()), + desc: Some("Description".into()), ..Default::default() }