feat(tvix/eval): implement OpFinalise instruction

This instruction finalises the initialisation of deferred upvalues in
closures (and soon, thunks).

The compiler does not yet emit this instruction, some more accounting
is needed for that.

Change-Id: Ic4181b26e19779e206f51e17388559400da5f93a
Reviewed-on: https://cl.tvl.fyi/c/depot/+/6337
Tested-by: BuildkiteCI
Reviewed-by: sterni <sternenseemann@systemli.org>
This commit is contained in:
Vincent Ambo 2022-08-28 17:28:20 +03:00 committed by tazjin
parent 1bfe32f412
commit 025a9a4a0a
3 changed files with 28 additions and 1 deletions

View file

@ -32,7 +32,6 @@ pub struct JumpOffset(pub usize);
#[derive(Clone, Copy, Debug)]
pub struct Count(pub usize);
#[allow(clippy::enum_variant_names)]
#[warn(variant_size_differences)]
#[derive(Clone, Copy, Debug)]
pub enum OpCode {
@ -108,6 +107,10 @@ pub enum OpCode {
OpGetUpvalue(UpvalueIdx),
OpClosure(ConstantIdx),
/// Finalise initialisation of the upvalues of the value in the
/// given stack index after the scope is fully bound.
OpFinalise(StackIdx),
// The closure and thunk creation instructions have a variable
// number of arguments to the instruction, which is represented
// here by making their data part of the opcodes.