From 834fe833e5dc1df6838cfa69c24a6f3b3c7a5c5b Mon Sep 17 00:00:00 2001 From: sterni Date: Tue, 20 Sep 2022 12:51:02 +0200 Subject: fix(tvix/eval/versions): preserve the Number string exactly 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 Tested-by: BuildkiteCI --- tvix/eval/src/builtins/mod.rs | 3 +-- tvix/eval/src/builtins/versions.rs | 8 ++++---- 2 files changed, 5 insertions(+), 6 deletions(-) (limited to 'tvix') diff --git a/tvix/eval/src/builtins/mod.rs b/tvix/eval/src/builtins/mod.rs index 02457340dc..0b1fe540fe 100644 --- a/tvix/eval/src/builtins/mod.rs +++ b/tvix/eval/src/builtins/mod.rs @@ -220,8 +220,7 @@ fn pure_builtins() -> Vec { 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 60d4503c7e..33679ed403 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(), } -- cgit 1.4.1