From a586993e0f0944329c44a822abd7be79f15f1895 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Sun, 07 Aug 2022 20:54:08 +0000 Subject: [PATCH] perf: remove allocation on empty string concat --- --- a/crates/jrsonnet-evaluator/src/evaluate/operator.rs +++ b/crates/jrsonnet-evaluator/src/evaluate/operator.rs @@ -21,12 +21,15 @@ pub fn evaluate_add_op(s: State, a: &Val, b: &Val) -> Result { use Val::*; Ok(match (a, b) { + (Str(a), Str(b)) if a.is_empty() => Val::Str(b.clone()), + (Str(a), Str(b)) if b.is_empty() => Val::Str(a.clone()), (Str(v1), Str(v2)) => Str(((**v1).to_owned() + v2).into()), // Can't use generic json serialization way, because it depends on number to string concatenation (std.jsonnet:890) (Num(a), Str(b)) => Str(format!("{a}{b}").into()), (Str(a), Num(b)) => Str(format!("{a}{b}").into()), + (Str(a), o) | (o, Str(a)) if a.is_empty() => Val::Str(o.clone().to_string(s)?), (Str(a), o) => Str(format!("{}{}", a, o.clone().to_string(s)?).into()), (o, Str(a)) => Str(format!("{}{}", o.clone().to_string(s)?, a).into()), -- gitstuff