about summary refs log tree commit diff
path: root/tvix/eval/src/tests/tvix_tests/eval-okay-late-binding-closure.nix
diff options
context:
space:
mode:
authorsterni <sternenseemann@systemli.org>2022-09-08T10·50+0200
committertazjin <tazjin@tvl.su>2022-09-11T12·26+0000
commit7046604cfec0dc48edf533fc4ac21afd57f99875 (patch)
tree39450647082ea3421921ae996df9ff5ea92129dc /tvix/eval/src/tests/tvix_tests/eval-okay-late-binding-closure.nix
parentbb1adbb05b1a9e6071869cf34a871a0ac49734b0 (diff)
fix(tvix/eval): place plain inherits in correct stack slots r/4809
We need to make sure that we compile all plain inherits in a let
expression before declaring any other locals. Plain inherits are special
in the sense that they can never be recursive, instead resolving to a
higher scope. Thus we need to compile their value, before declaring
them. If we don't do that, before any other local can be declared,
we cause a situation where the plain inherits' values are placed into
other locals' stack slots.

Note that we can't integrate the plain inherit compilation into the
regular 2-3 phase model where we defer the compilation of the value or
we'd compile `let inherit x; in …` as `let x = x; in …`.

Change-Id: I951d5df3c9661a054e12401546875f4685b5bf08
Reviewed-on: https://cl.tvl.fyi/c/depot/+/6496
Tested-by: BuildkiteCI
Reviewed-by: tazjin <tazjin@tvl.su>
Reviewed-by: sterni <sternenseemann@systemli.org>
Diffstat (limited to 'tvix/eval/src/tests/tvix_tests/eval-okay-late-binding-closure.nix')
0 files changed, 0 insertions, 0 deletions