about summary refs log tree commit diff
path: root/pkg/lang/vm/value/env.go
blob: 34a396cdf241fbf6cc59595a4ce215e1e8d61cb7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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
}

func (e *Env) Len() int {
	return len(e.references)
}

type reference struct {
	stackIndex int
	outlet     mem.Ptr
}