From 5d72d3980f21ac720520e4d2450f0709b6b581ea Mon Sep 17 00:00:00 2001 From: Aspen Smith Date: Sat, 10 Feb 2024 12:22:59 -0500 Subject: [PATCH] refactor(tvix/eval): Box the strings in CatchableErrorKind These strings are allocated once and never changed, so they don't need the additional overhead of a capacity given by String - instead, we can use Box and save on 16 bytes for each of these, *and* for each Value since this is currently the largest Value variant. Change-Id: I3e5cb070fe6c5bf82114c92d04f6bae775663a7e Reviewed-on: https://cl.tvl.fyi/c/depot/+/10796 Autosubmit: aspen Reviewed-by: sterni Tested-by: BuildkiteCI --- tvix/eval/src/builtins/mod.rs | 10 ++++------ tvix/eval/src/errors.rs | 6 +++--- tvix/eval/src/nix_search_path.rs | 11 +++++++---- 3 files changed, 14 insertions(+), 13 deletions(-) diff --git a/tvix/eval/src/builtins/mod.rs b/tvix/eval/src/builtins/mod.rs index d9f856788..3048b32fb 100644 --- a/tvix/eval/src/builtins/mod.rs +++ b/tvix/eval/src/builtins/mod.rs @@ -476,7 +476,7 @@ mod pure_builtins { async fn builtin_filterSource(_co: GenCo, #[lazy] _e: Value) -> Result { // TODO: implement for nixpkgs compatibility Ok(Value::Catchable(CatchableErrorKind::UnimplementedFeature( - "filterSource".to_string(), + "filterSource".into(), ))) } @@ -695,7 +695,7 @@ mod pure_builtins { ) -> Result { // FIXME: propagate contexts here. Ok(Value::Catchable(CatchableErrorKind::UnimplementedFeature( - "hashString".to_string(), + "hashString".into(), ))) } @@ -1392,7 +1392,7 @@ mod pure_builtins { // TODO(sterni): coerces to string // We do not care about the context here explicitly. Ok(Value::Catchable(CatchableErrorKind::Throw( - message.to_contextful_str()?.to_string(), + message.to_contextful_str()?.to_string().into(), ))) } @@ -1531,9 +1531,7 @@ pub fn pure_builtins() -> Vec<(&'static str, Value)> { // TODO: implement for nixpkgs compatibility result.push(( "__curPos", - Value::Catchable(CatchableErrorKind::UnimplementedFeature( - "__curPos".to_string(), - )), + Value::Catchable(CatchableErrorKind::UnimplementedFeature("__curPos".into())), )); result diff --git a/tvix/eval/src/errors.rs b/tvix/eval/src/errors.rs index d5cb6ef34..b59ee675d 100644 --- a/tvix/eval/src/errors.rs +++ b/tvix/eval/src/errors.rs @@ -40,11 +40,11 @@ use crate::{SourceCode, Value}; /// #[derive(Clone, Debug)] pub enum CatchableErrorKind { - Throw(String), + Throw(Box), AssertionFailed, - UnimplementedFeature(String), + UnimplementedFeature(Box), /// Resolving a user-supplied angle brackets path literal failed in some way. - NixPathResolution(String), + NixPathResolution(Box), } #[derive(Clone, Debug)] diff --git a/tvix/eval/src/nix_search_path.rs b/tvix/eval/src/nix_search_path.rs index 2f6d44447..566ca1223 100644 --- a/tvix/eval/src/nix_search_path.rs +++ b/tvix/eval/src/nix_search_path.rs @@ -138,10 +138,13 @@ impl NixSearchPath { return Ok(Ok(p)); } } - Ok(Err(CatchableErrorKind::NixPathResolution(format!( - "path '{}' was not found in the Nix search path", - path.display() - )))) + Ok(Err(CatchableErrorKind::NixPathResolution( + format!( + "path '{}' was not found in the Nix search path", + path.display() + ) + .into_boxed_str(), + ))) } }