diff options
author | Vincent Ambo <mail@tazj.in> | 2022-08-14T21·33+0300 |
---|---|---|
committer | tazjin <tazjin@tvl.su> | 2022-08-31T22·26+0000 |
commit | 5a497cdf1cfae31c3a391ca803d8a0bd86bfab1b (patch) | |
tree | 424be932cc176a76f9342eff5671aa5d282eeaa0 | |
parent | 7cfdedfdfb6657a05ca8ce423874833eddb4ee72 (diff) |
feat(tvix/eval): implement with_stack in VM r/4552
Change-Id: I805c24c9a751ded15725ba9be651aa0869e013e5 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6218 Tested-by: BuildkiteCI Reviewed-by: sterni <sternenseemann@systemli.org> Reviewed-by: grfn <grfn@gws.fyi>
-rw-r--r-- | tvix/eval/src/vm.rs | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/tvix/eval/src/vm.rs b/tvix/eval/src/vm.rs index 881d79ba9853..66126881a84f 100644 --- a/tvix/eval/src/vm.rs +++ b/tvix/eval/src/vm.rs @@ -17,6 +17,10 @@ pub struct VM { ip: usize, chunk: Chunk, stack: Vec<Value>, + + // Stack indices of attribute sets from which variables should be + // dynamically resolved (`with`). + with_stack: Vec<usize>, } macro_rules! arithmetic_op { @@ -277,7 +281,7 @@ impl VM { self.push(value) } - OpCode::OpPushWith(_idx) => todo!("with handling not implemented"), + OpCode::OpPushWith(idx) => self.with_stack.push(idx), } #[cfg(feature = "disassembler")] @@ -335,6 +339,7 @@ pub fn run_chunk(chunk: Chunk) -> EvalResult<Value> { chunk, ip: 0, stack: vec![], + with_stack: vec![], }; vm.run() |