From 0a7700112f82e634a957685bee0cbaa3458f4945 Mon Sep 17 00:00:00 2001 From: Mel Date: Sat, 28 May 2022 01:22:17 +0000 Subject: Harden VM Mem --- pkg/lang/vm/value/cells.go | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 pkg/lang/vm/value/cells.go (limited to 'pkg/lang/vm/value/cells.go') 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) +} -- cgit 1.4.1