diff options
Diffstat (limited to 'pkg/lang/vm/value/cells.go')
| -rw-r--r-- | pkg/lang/vm/value/cells.go | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/pkg/lang/vm/value/cells.go b/pkg/lang/vm/value/cells.go new file mode 100644 index 0000000..17a0916 --- /dev/null +++ b/pkg/lang/vm/value/cells.go @@ -0,0 +1,46 @@ +package value + +import "jinx/pkg/lang/vm/mem" + +type ArrayCell []Value + +func (a ArrayCell) DropCell(m *mem.Mem) { + for _, v := range a { + v.Drop(m) + } +} + +func (a ArrayCell) Get() []Value { + return a +} + +type StringCell string + +func (s StringCell) DropCell(m *mem.Mem) { +} + +func (s StringCell) Get() string { + return string(s) +} + +type OutletCell Value + +func (o OutletCell) DropCell(m *mem.Mem) { + Value(o).Drop(m) +} + +func (o OutletCell) Get() Value { + return Value(o) +} + +type EnvCell Env + +func (e EnvCell) DropCell(m *mem.Mem) { + for _, v := range e.references { + m.Release(v.outlet) + } +} + +func (e EnvCell) Get() Env { + return Env(e) +} |
