git.delta.rocks / jrsonnet / refs/commits / f455d544abdf

difftreelog

feat multichar std.splitLimit

Yaroslav Bolyukin2022-04-20parent: #00b3f93.patch.diff
in: master

2 files changed

modifiedcrates/jrsonnet-evaluator/src/builtin/mod.rsdiffbeforeafterboth
--- 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<VecVal> {
+fn builtin_splitlimit(str: IStr, c: IStr, maxsplits: Either![usize, M1]) -> Result<VecVal> {
 	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]
modifiedcrates/jrsonnet-stdlib/src/std.jsonnetdiffbeforeafterboth
122 assert std.length(str) > 0 : 'Not hexadecimal: ""';122 assert std.length(str) > 0 : 'Not hexadecimal: ""';
123 parse_nat(str, 16),123 parse_nat(str, 16),
124124
125 split(str, c)::125 split(str, c):: std.splitLimit(str, c, -1),
126 assert std.isString(str) : 'std.split first parameter should be a string, got ' + std.type(str);
127 assert std.isString(c) : 'std.split second parameter should be a string, got ' + std.type(c);
128 assert std.length(c) == 1 : 'std.split second parameter should have length 1, got ' + std.length(c);
129 std.splitLimit(str, c, -1),
130126
131 splitLimit:: $intrinsic(splitLimit),127 splitLimit:: $intrinsic(splitLimit),
132128