From 1a48f390784a30df3e7e8259e71866d6916c5231 Mon Sep 17 00:00:00 2001 From: Vincent Ambo Date: Sat, 15 Aug 2020 02:51:59 +0100 Subject: fix(tvix): Ensure prim_sort actually uses the right outlist Previously the outlist would not be used, and it would sort god knows what in the out value. This was probably introduced by the std::vector refactoring, and the language test for builtins.sort was disabled. Whatever reason there was for disabling it seems to be gone, so we're re-enabling it. Change-Id: I98941c2cad78df58ff7bea1ece3aaa4133e94bf8 Reviewed-on: https://cl.tvl.fyi/c/depot/+/1757 Reviewed-by: kanepyork Tested-by: BuildkiteCI --- third_party/nix/src/libexpr/primops.cc | 9 +++++---- third_party/nix/src/tests/lang/disabled/eval-okay-sort.nix | 8 -------- third_party/nix/src/tests/lang/eval-okay-sort.nix | 8 ++++++++ 3 files changed, 13 insertions(+), 12 deletions(-) delete mode 100644 third_party/nix/src/tests/lang/disabled/eval-okay-sort.nix create mode 100644 third_party/nix/src/tests/lang/eval-okay-sort.nix (limited to 'third_party/nix') diff --git a/third_party/nix/src/libexpr/primops.cc b/third_party/nix/src/libexpr/primops.cc index 34d659675b..7819dd4b13 100644 --- a/third_party/nix/src/libexpr/primops.cc +++ b/third_party/nix/src/libexpr/primops.cc @@ -1600,9 +1600,10 @@ static void prim_sort(EvalState& state, const Pos& pos, Value** args, state.forceList(*args[1], pos); // Copy of the input list which can be sorted in place. - auto outlist = new NixList(*args[1]->list); + v.type = tList; + v.list = new NixList(*args[1]->list); - std::for_each(outlist->begin(), outlist->end(), + std::for_each(v.list->begin(), v.list->end(), [&](Value* val) { state.forceValue(*val); }); auto comparator = [&](Value* a, Value* b) { @@ -1612,8 +1613,8 @@ static void prim_sort(EvalState& state, const Pos& pos, Value** args, return CompareValues()(a, b); } - Value vTmp1; - Value vTmp2; + Value vTmp1{}; + Value vTmp2{}; state.callFunction(*args[0], *a, vTmp1, pos); state.callFunction(vTmp1, *b, vTmp2, pos); return state.forceBool(vTmp2, pos); diff --git a/third_party/nix/src/tests/lang/disabled/eval-okay-sort.nix b/third_party/nix/src/tests/lang/disabled/eval-okay-sort.nix deleted file mode 100644 index 8299c3a4a3..0000000000 --- a/third_party/nix/src/tests/lang/disabled/eval-okay-sort.nix +++ /dev/null @@ -1,8 +0,0 @@ -with builtins; - -[ (sort lessThan [ 483 249 526 147 42 77 ]) - (sort (x: y: y < x) [ 483 249 526 147 42 77 ]) - (sort lessThan [ "foo" "bar" "xyzzy" "fnord" ]) - (sort (x: y: x.key < y.key) - [ { key = 1; value = "foo"; } { key = 2; value = "bar"; } { key = 1; value = "fnord"; } ]) -] diff --git a/third_party/nix/src/tests/lang/eval-okay-sort.nix b/third_party/nix/src/tests/lang/eval-okay-sort.nix new file mode 100644 index 0000000000..8299c3a4a3 --- /dev/null +++ b/third_party/nix/src/tests/lang/eval-okay-sort.nix @@ -0,0 +1,8 @@ +with builtins; + +[ (sort lessThan [ 483 249 526 147 42 77 ]) + (sort (x: y: y < x) [ 483 249 526 147 42 77 ]) + (sort lessThan [ "foo" "bar" "xyzzy" "fnord" ]) + (sort (x: y: x.key < y.key) + [ { key = 1; value = "foo"; } { key = 2; value = "bar"; } { key = 1; value = "fnord"; } ]) +] -- cgit 1.4.1