package vm import ( "jinx/pkg/lang/vm/mem" "jinx/pkg/lang/vm/value" ) func (vm *VM) setup() error { if err := vm.setupCoreLib(); err != nil { return err } return nil } func (vm *VM) setupCoreLib() error { type allocationJob struct { at mem.Ptr t value.Type } toAllocate := []allocationJob{ {at: value.CORE_TYPE_NULL, t: vm.createCoreNullType()}, {at: value.CORE_TYPE_INT, t: vm.createCoreIntType()}, {at: value.CORE_TYPE_FLOAT, t: vm.createCoreFloatType()}, {at: value.CORE_TYPE_STRING, t: vm.createCoreStringType()}, {at: value.CORE_TYPE_BOOL, t: vm.createCoreBoolType()}, {at: value.CORE_TYPE_ARRAY, t: vm.createCoreArrayType()}, {at: value.CORE_TYPE_FUNCTION, t: vm.createCoreFunctionType()}, } for _, job := range toAllocate { if err := vm.memory.AllocateAt(job.at, mem.CellKindType); err != nil { return err } if err := vm.memory.Set(job.at, value.TypeCell(job.t)); err != nil { return err } } return nil }