--- a/crates/jrsonnet-evaluator/src/builtin/mod.rs +++ b/crates/jrsonnet-evaluator/src/builtin/mod.rs @@ -623,12 +623,15 @@ } #[jrsonnet_macros::builtin] -fn builtin_splitlimit(str: IStr, c: char, maxsplits: Either![usize, M1]) -> Result { +fn builtin_splitlimit(str: IStr, c: IStr, maxsplits: Either![usize, M1]) -> Result { use Either2::*; - Ok(VecVal(match maxsplits { - A(n) => str.splitn(n + 1, c).map(|s| Val::Str(s.into())).collect(), - B(_) => str.split(c).map(|s| Val::Str(s.into())).collect(), - })) + Ok(VecVal(Cc::new(match maxsplits { + A(n) => str + .splitn(n + 1, &c as &str) + .map(|s| Val::Str(s.into())) + .collect(), + B(_) => str.split(&c as &str).map(|s| Val::Str(s.into())).collect(), + }))) } #[jrsonnet_macros::builtin] --- a/crates/jrsonnet-stdlib/src/std.jsonnet +++ b/crates/jrsonnet-stdlib/src/std.jsonnet @@ -122,11 +122,7 @@ assert std.length(str) > 0 : 'Not hexadecimal: ""'; parse_nat(str, 16), - split(str, c):: - assert std.isString(str) : 'std.split first parameter should be a string, got ' + std.type(str); - assert std.isString(c) : 'std.split second parameter should be a string, got ' + std.type(c); - assert std.length(c) == 1 : 'std.split second parameter should have length 1, got ' + std.length(c); - std.splitLimit(str, c, -1), + split(str, c):: std.splitLimit(str, c, -1), splitLimit:: $intrinsic(splitLimit),