about summary refs log tree commit diff
path: root/pkg/lang/vm/value/env.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/lang/vm/value/env.go')
-rw-r--r--pkg/lang/vm/value/env.go33
1 files changed, 33 insertions, 0 deletions
diff --git a/pkg/lang/vm/value/env.go b/pkg/lang/vm/value/env.go
new file mode 100644
index 0000000..b7bb3ab
--- /dev/null
+++ b/pkg/lang/vm/value/env.go
@@ -0,0 +1,33 @@
+package value
+
+import "jinx/pkg/lang/vm/mem"
+
+type Env struct {
+	references []reference
+}
+
+func NewEnv() Env {
+	return Env{
+		references: make([]reference, 0),
+	}
+}
+
+func (e *Env) Add(stackIndex int, outlet mem.Ptr) {
+	e.references = append(e.references, reference{
+		stackIndex: stackIndex,
+		outlet:     outlet,
+	})
+}
+
+func (e *Env) GetOutlet(envIndex int) mem.Ptr {
+	return e.references[envIndex].outlet
+}
+
+func (e *Env) GetStackIndex(envIndex int) int {
+	return e.references[envIndex].stackIndex
+}
+
+type reference struct {
+	stackIndex int
+	outlet     mem.Ptr
+}