diff options
Diffstat (limited to 'pkg/lang/vm/value/data.go')
| -rw-r--r-- | pkg/lang/vm/value/data.go | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/pkg/lang/vm/value/data.go b/pkg/lang/vm/value/data.go index 39193d5..1cd258b 100644 --- a/pkg/lang/vm/value/data.go +++ b/pkg/lang/vm/value/data.go @@ -116,11 +116,31 @@ func (a ArrayData) Push(m mem.Mem, v Value) error { arr := data.(ArrayCell).Get() arr = append(arr, v) - m.Set(a.data, ArrayCell(arr)) + if err := m.Set(a.data, ArrayCell(arr)); err != nil { + return err + } return nil } +func (a ArrayData) Pop(m mem.Mem) (Value, error) { + data, err := m.Get(a.data) + if err != nil { + return Value{}, err + } + + arr := data.(ArrayCell).Get() + + popped := arr[len(arr)-1] + arr = arr[:len(arr)-1] + + if err := m.Set(a.data, ArrayCell(arr)); err != nil { + return Value{}, err + } + + return popped, nil +} + type NullData struct{} func (n NullData) String(_ mem.Mem) (string, error) { |
