git.delta.rocks / jrsonnet / refs/commits / 57f709a58e12

difftreelog

perf move resolvePath to native

Yaroslav Bolyukin2024-06-18parent: #71fb4e2.patch.diff
in: master

3 files changed

modifiedcrates/jrsonnet-stdlib/src/arrays.rsdiffbeforeafterboth
--- a/crates/jrsonnet-stdlib/src/arrays.rs
+++ b/crates/jrsonnet-stdlib/src/arrays.rs
@@ -208,6 +208,14 @@
 	)
 }
 
+#[builtin]
+pub fn builtin_resolve_path(f: String, r: String) -> String {
+	let Some(pos) = f.rfind('/') else {
+		return r;
+	};
+	format!("{}{}", &f[..=pos], r)
+}
+
 pub fn deep_join_inner(out: &mut String, arr: IndexableVal) -> Result<()> {
 	use std::fmt::Write;
 	match arr {
modifiedcrates/jrsonnet-stdlib/src/lib.rsdiffbeforeafterboth
--- a/crates/jrsonnet-stdlib/src/lib.rs
+++ b/crates/jrsonnet-stdlib/src/lib.rs
@@ -86,6 +86,7 @@
 		("range", builtin_range::INST),
 		("join", builtin_join::INST),
 		("lines", builtin_lines::INST),
+		("resolvePath", builtin_resolve_path::INST),
 		("deepJoin", builtin_deep_join::INST),
 		("reverse", builtin_reverse::INST),
 		("any", builtin_any::INST),
modifiedcrates/jrsonnet-stdlib/src/std.jsonnetdiffbeforeafterboth
10 error ('std.mapWithKey second param must be object, got ' + std.type(obj))10 error ('std.mapWithKey second param must be object, got ' + std.type(obj))
11 else11 else
12 { [k]: func(k, obj[k]) for k in std.objectFields(obj) },12 { [k]: func(k, obj[k]) for k in std.objectFields(obj) },
13
14 resolvePath(f, r)::
15 local arr = std.split(f, '/');
16 std.join('/', std.makeArray(std.length(arr) - 1, function(i) arr[i]) + [r]),
17}13}
1814