diff options
| author | Mel <einebeere@gmail.com> | 2022-05-28 01:22:17 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-05-28 01:22:17 +0000 |
| commit | 0a7700112f82e634a957685bee0cbaa3458f4945 (patch) | |
| tree | 847c397970d7d852bc988a7a01f4625eae443edb /pkg/lang/vm/value/cells.go | |
| parent | 83d1dc87f3336d70ccda476627c70c282b7b6e11 (diff) | |
| download | jinx-0a7700112f82e634a957685bee0cbaa3458f4945.tar.zst jinx-0a7700112f82e634a957685bee0cbaa3458f4945.zip | |
Harden VM Mem
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) +} |
