diff options
author | Vincent Ambo <mail@tazj.in> | 2022-08-28T13·50+0300 |
---|---|---|
committer | tazjin <tazjin@tvl.su> | 2022-09-06T14·58+0000 |
commit | 6c1948a71a7a52978a3ded23e242d664a5f097de (patch) | |
tree | b6e22fb6e8c2d0f9a025499bd43b31f4e8a2b115 /tvix/eval/src/vm.rs | |
parent | 203d9f2e3e05a0735269a9c73c26206ed34d653e (diff) |
feat(tvix/eval): detect deferred upvalue capturing r/4665
Uses the threaded through slot offset to determine whether initialisation of a captured local upvalue must be defered to a later point where all values of a scope are available. This adds a new data representation to the opcode for this situation, but the equivalent runtime handling is not yet implemented. This is in part because there is more compiler machinery needed to find the resolution point. Change-Id: Ifd0c393f76abfe6e2d91483faf0f58947ab1dedc Reviewed-on: https://cl.tvl.fyi/c/depot/+/6329 Reviewed-by: sterni <sternenseemann@systemli.org> Tested-by: BuildkiteCI
Diffstat (limited to 'tvix/eval/src/vm.rs')
-rw-r--r-- | tvix/eval/src/vm.rs | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/tvix/eval/src/vm.rs b/tvix/eval/src/vm.rs index 316732dba0ed..33ea81087f64 100644 --- a/tvix/eval/src/vm.rs +++ b/tvix/eval/src/vm.rs @@ -426,6 +426,10 @@ impl VM { closure.push_upvalue(value); } + OpCode::DataDeferredLocal(_idx) => { + todo!("deferred local initialisation") + } + _ => panic!("compiler error: missing closure operand"), } } @@ -434,6 +438,7 @@ impl VM { // Data-carrying operands should never be executed, // that is a critical error in the VM. OpCode::DataLocalIdx(_) + | OpCode::DataDeferredLocal(_) | OpCode::DataUpvalueIdx(_) | OpCode::DataDynamicIdx(_) | OpCode::DataDynamicAncestor(_) => { |