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

@ -111,7 +111,7 @@ impl Compiler {
rnix::StrPart::Ast(node) => self.compile(node)?,
rnix::StrPart::Literal(lit) => {
let idx = self.chunk.add_constant(Value::String(NixString(lit)));
let idx = self.chunk.add_constant(Value::String(lit.into()));
self.chunk.add_op(OpCode::OpConstant(idx));
}
}
@ -206,9 +206,9 @@ impl Compiler {
let ident = rnix::types::Ident::cast(fragment).unwrap();
// TODO(tazjin): intern!
let idx = self
.chunk
.add_constant(Value::String(NixString(ident.as_str().to_string())));
let idx = self.chunk.add_constant(Value::String(NixString::Heap(
ident.as_str().to_string(),
)));
self.chunk.add_op(OpCode::OpConstant(idx));
}