diff options
author | Vincent Ambo <mail@tazj.in> | 2022-08-10T14·53+0300 |
---|---|---|
committer | tazjin <tazjin@tvl.su> | 2022-08-24T18·19+0000 |
commit | 6dc9ca5723ee46ade3ad3618ae780ec88ae884e2 (patch) | |
tree | 9bdf55af081c9dd0f9f59739b4455534f7cad39c /tvix/eval/src/value/attrs.rs | |
parent | c7ba2dec04c9c0bf7558285ed7d434e61ee5e5b5 (diff) |
feat(tvix/value): introduce string representation with &'static str r/4457
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>
Diffstat (limited to 'tvix/eval/src/value/attrs.rs')
-rw-r--r-- | tvix/eval/src/value/attrs.rs | 22 |
1 files changed, 8 insertions, 14 deletions
diff --git a/tvix/eval/src/value/attrs.rs b/tvix/eval/src/value/attrs.rs index 75ade6a89a9f..7e3b5f231d66 100644 --- a/tvix/eval/src/value/attrs.rs +++ b/tvix/eval/src/value/attrs.rs @@ -71,14 +71,8 @@ impl NixAttrs { NixAttrs::KV { name, value } => { *self = NixAttrs::Map(BTreeMap::from([ - ( - NixString("name".into()), - std::mem::replace(name, Value::Blackhole), - ), - ( - NixString("value".into()), - std::mem::replace(value, Value::Blackhole), - ), + ("name".into(), std::mem::replace(name, Value::Blackhole)), + ("value".into(), std::mem::replace(value, Value::Blackhole)), ])); self.map_mut() } @@ -155,14 +149,14 @@ impl NixAttrs { fn attempt_optimise_kv(slice: &mut [Value]) -> Option<NixAttrs> { let (name_idx, value_idx) = { match (&slice[2], &slice[0]) { - (Value::String(NixString(s1)), Value::String(NixString(s2))) - if (s1 == "name" && s2 == "value") => + (Value::String(s1), Value::String(s2)) + if (*s1 == NixString::NAME && *s2 == NixString::VALUE) => { (3, 1) } - (Value::String(NixString(s1)), Value::String(NixString(s2))) - if (s1 == "value" && s2 == "name") => + (Value::String(s1), Value::String(s2)) + if (*s1 == NixString::VALUE && *s2 == NixString::NAME) => { (1, 3) } @@ -189,7 +183,7 @@ fn set_attr(attrs: &mut NixAttrs, key: NixString, value: Value) -> EvalResult<() match entry { std::collections::btree_map::Entry::Occupied(entry) => { return Err(Error::DuplicateAttrsKey { - key: entry.key().0.clone(), + key: entry.key().as_str().to_string(), }) } @@ -254,7 +248,7 @@ fn set_nested_attr( _ => { return Err(Error::DuplicateAttrsKey { - key: entry.key().0.clone(), + key: entry.key().as_str().to_string(), }) } }, |