diff options
| author | Mel <einebeere@gmail.com> | 2022-05-29 21:42:32 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-05-29 21:42:32 +0000 |
| commit | d2f69dccb3643834a79da79be4ece189a7178c9e (patch) | |
| tree | 7e32365a25f37bee199dde36dfdfef12916de46f /pkg/lang/vm/setup.go | |
| parent | 11bcf772bf8d9aa353eb4c04bfb85378ba392b1e (diff) | |
| download | jinx-d2f69dccb3643834a79da79be4ece189a7178c9e.tar.zst jinx-d2f69dccb3643834a79da79be4ece189a7178c9e.zip | |
Types, Methods and basic Core Lib
Diffstat (limited to 'pkg/lang/vm/setup.go')
| -rw-r--r-- | pkg/lang/vm/setup.go | 43 |
1 files changed, 43 insertions, 0 deletions
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 +} |
