about summary refs log tree commit diff
path: root/pkg/lang/vm/value/env.go
diff options
context:
space:
mode:
authorMel <einebeere@gmail.com>2022-05-27 23:34:40 +0000
committerGitHub <noreply@github.com>2022-05-27 23:34:40 +0000
commit83d1dc87f3336d70ccda476627c70c282b7b6e11 (patch)
tree70610879d3de1ddf02bbe9067076fe65b52979a9 /pkg/lang/vm/value/env.go
parent47c4cd3705bee9d7154c42ce95aef6f8a19e0661 (diff)
downloadjinx-83d1dc87f3336d70ccda476627c70c282b7b6e11.tar.zst
jinx-83d1dc87f3336d70ccda476627c70c282b7b6e11.zip
Function envs and value escaping
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
+}