about summary refs log tree commit diff
path: root/pkg/lang/vm/core.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/lang/vm/core.go')
-rw-r--r--pkg/lang/vm/core.go10
1 files changed, 10 insertions, 0 deletions
diff --git a/pkg/lang/vm/core.go b/pkg/lang/vm/core.go
index 7d5aefe..477cee8 100644
--- a/pkg/lang/vm/core.go
+++ b/pkg/lang/vm/core.go
@@ -40,6 +40,7 @@ func (vm *VM) createCoreArrayType() value.Type {
 		Kind: value.ArrayType,
 		Methods: map[string]value.FunctionData{
 			"length": makeCoreFn(vm.coreArrayLength, 0),
+			"push": makeCoreFn(vm.coreArrayPush, 1),
 		},
 	}
 }
@@ -73,6 +74,15 @@ func (vm *VM) coreArrayLength(args []value.Value) (value.Value, error) {
 	return res, nil
 }
 
+func (vm *VM) coreArrayPush(args []value.Value) (value.Value, error) {
+	a, err := ensureTypeThis[value.ArrayData](vm, value.ArrayType)
+	if err != nil {
+		return value.Value{}, err
+	}
+
+	return value.Value{}, a.Push(vm.memory, args[0])
+}
+
 func (vm *VM) coreTypeRefIntrAddMethod(args []value.Value) (value.Value, error) {
 	ref, err := ensureTypeThis[value.TypeRefData](vm, value.TypeRefType)
 	if err != nil {