feat(tvix/value): introduce string representation with &'static str

For cases where the strings are statically known (such as the
oft-occuring name/value), this can be a useful optimisation.

It's also much more convenient in tests.

Change-Id: Ie462b684805bd4986ea5e85ca4bff663bc2d3c3c
Reviewed-on: https://cl.tvl.fyi/c/depot/+/6111
Tested-by: BuildkiteCI
Reviewed-by: eta <tvl@eta.st>
This commit is contained in:
Vincent Ambo 2022-08-10 17:53:22 +03:00 committed by tazjin
parent c7ba2dec04
commit 6dc9ca5723
4 changed files with 44 additions and 26 deletions

View file

@ -7,7 +7,7 @@ use crate::{
chunk::Chunk,
errors::{Error, EvalResult},
opcode::OpCode,
value::{NixAttrs, NixList, NixString, Value},
value::{NixAttrs, NixList, Value},
};
pub struct VM {
@ -159,10 +159,10 @@ impl VM {
let mut out = String::new();
for _ in 0..count {
out.push_str(&self.pop().as_string()?.0);
out.push_str(&self.pop().as_string()?.as_str());
}
self.push(Value::String(NixString(out)));
self.push(Value::String(out.into()));
Ok(())
}