about summary refs log tree commit diff
path: root/pkg/lang/vm/value/cells.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/lang/vm/value/cells.go')
-rw-r--r--pkg/lang/vm/value/cells.go46
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)
+}