From f68c76d07daf9794797b1056ce39e8e1bdeca8e4 Mon Sep 17 00:00:00 2001 From: Vincent Ambo Date: Tue, 6 Sep 2022 17:44:32 +0300 Subject: fix(tvix/eval): account for attrset temporaries during construction The temporaries left on the stack as operands to `OpAttrs` must be accounted for in the locals array in order for operations within them to receive correct slots. Some test cases that were previously broken have been added. Change-Id: Ib52b629bbdf7931f63fd45a45af1073022da923c Reviewed-on: https://cl.tvl.fyi/c/depot/+/6468 Tested-by: BuildkiteCI Reviewed-by: sterni --- .../src/tests/tvix_tests/eval-okay-with-in-dynamic-key.nix | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 tvix/eval/src/tests/tvix_tests/eval-okay-with-in-dynamic-key.nix (limited to 'tvix/eval/src/tests/tvix_tests/eval-okay-with-in-dynamic-key.nix') diff --git a/tvix/eval/src/tests/tvix_tests/eval-okay-with-in-dynamic-key.nix b/tvix/eval/src/tests/tvix_tests/eval-okay-with-in-dynamic-key.nix new file mode 100644 index 000000000000..c44455a5bf83 --- /dev/null +++ b/tvix/eval/src/tests/tvix_tests/eval-okay-with-in-dynamic-key.nix @@ -0,0 +1,12 @@ +# Tests correct tracking of stack indices within construction of an +# attribute set. Dynamic keys can be any expression, so something that +# is extremely sensitive to stack offsets (like `with`) can be tricky. + +let + set1 = { key = "b"; }; + set2 = { + a = 20; + ${with set1; key} = 20; + ${with { key = "c"; }; key} = 2; + }; +in set2.a + set2.b + set2.c -- cgit 1.4.1