From d2f69dccb3643834a79da79be4ece189a7178c9e Mon Sep 17 00:00:00 2001 From: Mel Date: Sun, 29 May 2022 21:42:32 +0000 Subject: Types, Methods and basic Core Lib --- pkg/lang/vm/setup.go | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 pkg/lang/vm/setup.go (limited to 'pkg/lang/vm/setup.go') diff --git a/pkg/lang/vm/setup.go b/pkg/lang/vm/setup.go new file mode 100644 index 0000000..754fd3a --- /dev/null +++ b/pkg/lang/vm/setup.go @@ -0,0 +1,43 @@ +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 +} -- cgit 1.4.1