diff options
author | sterni <sternenseemann@systemli.org> | 2022-09-20T10·51+0200 |
---|---|---|
committer | sterni <sternenseemann@systemli.org> | 2022-09-21T13·08+0000 |
commit | 834fe833e5dc1df6838cfa69c24a6f3b3c7a5c5b (patch) | |
tree | dc820a48acd4b34f9b5ae1a12dbc7f5ab83f2dfd /tvix/eval | |
parent | 6e6edcce6ac38bf2ca088a7efeb73f5db0bee8a6 (diff) |
fix(tvix/eval/versions): preserve the Number string exactly r/4947
This is relevant for builtins.splitVersion: nix-repl> builtins.splitVersion "unstable-2022-02-21" [ "unstable" "2022" "02" "21" ] Change-Id: I0a0add178d95d5a82e112b41ed5f3ca5a19608f8 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6710 Reviewed-by: tazjin <tazjin@tvl.su> Tested-by: BuildkiteCI
Diffstat (limited to 'tvix/eval')
-rw-r--r-- | tvix/eval/src/builtins/mod.rs | 3 | ||||
-rw-r--r-- | tvix/eval/src/builtins/versions.rs | 8 |
2 files changed, 5 insertions, 6 deletions
diff --git a/tvix/eval/src/builtins/mod.rs b/tvix/eval/src/builtins/mod.rs index 02457340dcd1..0b1fe540fed9 100644 --- a/tvix/eval/src/builtins/mod.rs +++ b/tvix/eval/src/builtins/mod.rs @@ -220,8 +220,7 @@ fn pure_builtins() -> Vec<Builtin> { let parts = s .map(|s| { Value::String(match s { - // TODO(sterni): we should avoid converting back and forth here - VersionPart::Number(n) => format!("{n}").into(), + VersionPart::Number(n) => n.into(), VersionPart::Word(w) => w.into(), }) }) diff --git a/tvix/eval/src/builtins/versions.rs b/tvix/eval/src/builtins/versions.rs index 60d4503c7e4b..33679ed4034b 100644 --- a/tvix/eval/src/builtins/versions.rs +++ b/tvix/eval/src/builtins/versions.rs @@ -6,7 +6,7 @@ use std::ops::RangeInclusive; #[derive(PartialEq, Eq, PartialOrd, Ord, Clone, Debug)] pub enum VersionPart<'a> { Word(&'a str), - Number(u64), + Number(&'a str), } /// Type used to hold information about a VersionPart during creation @@ -46,7 +46,7 @@ impl<'a> Iterator for VersionPartsIter<'a> { match cached_part { InternalPart::Break => return None, InternalPart::Number { range } => { - return Some(VersionPart::Number(self.version[range].parse().unwrap())) + return Some(VersionPart::Number(&self.version[range])) } InternalPart::Word { range } => { return Some(VersionPart::Word(&self.version[range])) @@ -61,7 +61,7 @@ impl<'a> Iterator for VersionPartsIter<'a> { let cached_part = std::mem::replace(&mut self.cached_part, InternalPart::Break); match cached_part { InternalPart::Number { range } => { - Some(VersionPart::Number(self.version[range].parse().unwrap())) + Some(VersionPart::Number(&self.version[range])) } InternalPart::Word { range } => Some(VersionPart::Word(&self.version[range])), InternalPart::Break => self.next(), @@ -98,7 +98,7 @@ impl<'a> Iterator for VersionPartsIter<'a> { self.next() } InternalPart::Number { range } => { - Some(VersionPart::Number(self.version[range].parse().unwrap())) + Some(VersionPart::Number(&self.version[range])) } InternalPart::Break => self.next(), } |