aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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 {