about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAdam Joseph <adam@westernsemico.com>2022-10-14T04·07-0700
committerclbot <clbot@tvl.fyi>2022-10-26T14·27+0000
commit43844188773eff9dca3c0278ad66c8dc2ecfcffe (patch)
treea240cc7548f85fb7eb416c92189a9fc0da1339a5
parent499a443032aa5ff728e1c0c4220b1170b57a685c (diff)
docs(tvix/eval): StackIdx, LocalIdx UpvalueIdx r/5201
This adds a comment noting that StackIdx is an offset relative to
the base of the current CallFrame, whereas UpvalueIdx is an absolute
index into the upvalues array.

It also removes the confusing mention of StackIdx in the descriptive
comment for LocalIdx.  They index into totally different structures;
one exists at runtime and the other exists at compile time.

Change-Id: Ib932b1b0679734c15001e8c5c95a08293fa016b4
Signed-off-by: Adam Joseph <adam@westernsemico.com>
Reviewed-on: https://cl.tvl.fyi/c/depot/+/7017
Reviewed-by: grfn <grfn@gws.fyi>
Reviewed-by: tazjin <tazjin@tvl.su>
Tested-by: BuildkiteCI
-rw-r--r--tvix/eval/src/compiler/scope.rs4
-rw-r--r--tvix/eval/src/opcode.rs8
2 files changed, 7 insertions, 5 deletions
diff --git a/tvix/eval/src/compiler/scope.rs b/tvix/eval/src/compiler/scope.rs
index 83fba6eed7..327766bcb5 100644
--- a/tvix/eval/src/compiler/scope.rs
+++ b/tvix/eval/src/compiler/scope.rs
@@ -121,9 +121,7 @@ pub struct Upvalue {
     pub span: codemap::Span,
 }
 
-/// Represents the index of a local in the scope's local array, which
-/// is subtly different from its `StackIdx` (which excludes
-/// uninitialised values in between).
+/// The index of a local in the scope's local array at compile time.
 #[repr(transparent)]
 #[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd)]
 pub struct LocalIdx(usize);
diff --git a/tvix/eval/src/opcode.rs b/tvix/eval/src/opcode.rs
index 382a857ef9..b7367cd815 100644
--- a/tvix/eval/src/opcode.rs
+++ b/tvix/eval/src/opcode.rs
@@ -27,12 +27,16 @@ impl Sub<usize> for CodeIdx {
     }
 }
 
-/// Index of a value in the runtime stack.
+/// Index of a value in the runtime stack.  This is an offset
+/// *relative to* the VM value stack_base of the CallFrame
+/// containing the opcode which contains this StackIdx.
 #[repr(transparent)]
 #[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd)]
 pub struct StackIdx(pub usize);
 
-/// Index of an upvalue within a closure's upvalue list.
+/// Index of an upvalue within a closure's bound-variable upvalue
+/// list.  This is an absolute index into the Upvalues of the
+/// CallFrame containing the opcode which contains this UpvalueIdx.
 #[repr(transparent)]
 #[derive(Clone, Copy, Debug, PartialEq, Eq)]
 pub struct UpvalueIdx(pub usize);