authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2026-01-02 18:42:31-08:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2026-01-04 00:27:08-08:00
logaf164b3f3cdfddc2e5449b05b9e1a30535b9ac94
treef85fff47d1895bf2af2eae5c6d55624bb5fd1a9d
parentca5c5ade5f6ba73430ae9dd107c774d31382ad02

std.Build.Step.Run: no need to sort the environment

since we now use ArrayHashMap, the order is deterministic, and in fact, observable by applications.

1 files changed, 3 insertions(+), 25 deletions(-)

lib/std/Build/Step/Run.zig+3-25
...@@ -795,31 +795,9 @@ fn make(step: *Step, options: Step.MakeOptions) !void {...@@ -795,31 +795,9 @@ fn make(step: *Step, options: Step.MakeOptions) !void {
795 defer man.deinit();795 defer man.deinit();
796796
797 if (run.env_map) |env_map| {797 if (run.env_map) |env_map| {
798 const KV = struct { []const u8, []const u8 };798 for (env_map.keys(), env_map.values()) |key, value| {
799 var kv_pairs = try std.array_list.Managed(KV).initCapacity(arena, env_map.count());799 man.hash.addBytes(key);
800 var iter = env_map.iterator();800 man.hash.addBytes(value);
801 while (iter.next()) |entry| {
802 kv_pairs.appendAssumeCapacity(.{ entry.key_ptr.*, entry.value_ptr.* });
803 }
804
805 std.mem.sortUnstable(KV, kv_pairs.items, {}, struct {
806 fn lessThan(_: void, kv1: KV, kv2: KV) bool {
807 const k1 = kv1[0];
808 const k2 = kv2[0];
809
810 if (k1.len != k2.len) return k1.len < k2.len;
811
812 for (k1, k2) |c1, c2| {
813 if (c1 == c2) continue;
814 return c1 < c2;
815 }
816 unreachable; // two keys cannot be equal
817 }
818 }.lessThan);
819
820 for (kv_pairs.items) |kv| {
821 man.hash.addBytes(kv[0]);
822 man.hash.addBytes(kv[1]);
823 }801 }
824 }802 }
825803