about summary refs log tree commit diff
path: root/pkg/lang/vm/value
diff options
context:
space:
mode:
authorMel <einebeere@gmail.com>2022-08-16 20:33:41 +0000
committerMel <einebeere@gmail.com>2022-08-16 20:33:41 +0000
commitd84c0f36afcde4e5af2907d70931de75957d5277 (patch)
tree9eb056ca70c6bedf0ee6456baa4c1f7251384463 /pkg/lang/vm/value
parent51eb7626b788dc031c53016f203a54a2af762d9e (diff)
downloadjinx-d84c0f36afcde4e5af2907d70931de75957d5277.tar.zst
jinx-d84c0f36afcde4e5af2907d70931de75957d5277.zip
Implement setting values at index in an array
Diffstat (limited to 'pkg/lang/vm/value')
-rw-r--r--pkg/lang/vm/value/data.go14
1 files changed, 14 insertions, 0 deletions
diff --git a/pkg/lang/vm/value/data.go b/pkg/lang/vm/value/data.go
index 1cd258b..59e4742 100644
--- a/pkg/lang/vm/value/data.go
+++ b/pkg/lang/vm/value/data.go
@@ -108,6 +108,20 @@ func (a ArrayData) At(m mem.Mem, i int) (Value, error) {
 	return arr[i], nil
 }
 
+func (a ArrayData) Set(m mem.Mem, i int, v Value) error {
+	data, err := m.Get(a.data)
+	if err != nil {
+		return err
+	}
+	arr := data.(ArrayCell).Get()
+	arr[i] = v
+
+	if err := m.Set(a.data, ArrayCell(arr)); err != nil {
+		return err
+	}
+	return nil
+}
+
 func (a ArrayData) Push(m mem.Mem, v Value) error {
 	data, err := m.Get(a.data)
 	if err != nil {