diff options
| author | Mel <einebeere@gmail.com> | 2022-08-11 01:25:47 +0000 |
|---|---|---|
| committer | Mel <einebeere@gmail.com> | 2022-08-11 01:25:47 +0000 |
| commit | 86f31acf6789be116dcc54ed85b069a37c0f7aa8 (patch) | |
| tree | bc7afd6a8c340825996d29c6cfd392ae42b4fbd5 /pkg/lang/vm/value/core_ptrs.go | |
| parent | c46b2bc7ce6df1f2c6c9494ef08015ec29992da5 (diff) | |
| download | jinx-86f31acf6789be116dcc54ed85b069a37c0f7aa8.tar.zst jinx-86f31acf6789be116dcc54ed85b069a37c0f7aa8.zip | |
Actual modules and core
Diffstat (limited to 'pkg/lang/vm/value/core_ptrs.go')
| -rw-r--r-- | pkg/lang/vm/value/core_ptrs.go | 98 |
1 files changed, 87 insertions, 11 deletions
diff --git a/pkg/lang/vm/value/core_ptrs.go b/pkg/lang/vm/value/core_ptrs.go index a1f0365..adb9a6b 100644 --- a/pkg/lang/vm/value/core_ptrs.go +++ b/pkg/lang/vm/value/core_ptrs.go @@ -4,14 +4,90 @@ import ( "jinx/pkg/lang/vm/mem" ) -const ( - CORE_TYPE_NULL = mem.Ptr(iota + 1) - CORE_TYPE_INT - CORE_TYPE_FLOAT - CORE_TYPE_STRING - CORE_TYPE_BOOL - CORE_TYPE_ARRAY - CORE_TYPE_FUNCTION - - CORE_TYPE_TYPE_REF -) +// All CorePtrs are unitialized until the core module is loaded. +type CorePtrs struct { + CoreTypeNull mem.Ptr + CoreTypeInt mem.Ptr + CoreTypeFloat mem.Ptr + CoreTypeString mem.Ptr + CoreTypeBool mem.Ptr + CoreTypeArray mem.Ptr + CoreTypeFunction mem.Ptr + + CoreTypeTypeRef mem.Ptr +} + +func (c *CorePtrs) SetNull(p mem.Ptr) { + if c.CoreTypeNull != mem.NullPtr { + panic("core ptr null already set") + } + + c.CoreTypeNull = p +} + +func (c *CorePtrs) SetInt(p mem.Ptr) { + if c.CoreTypeInt != mem.NullPtr { + panic("core ptr int already set") + } + + c.CoreTypeInt = p +} + +func (c *CorePtrs) SetFloat(p mem.Ptr) { + if c.CoreTypeFloat != mem.NullPtr { + panic("core ptr float already set") + } + + c.CoreTypeFloat = p +} + +func (c *CorePtrs) SetString(p mem.Ptr) { + if c.CoreTypeString != mem.NullPtr { + panic("core ptr string already set") + } + + c.CoreTypeString = p +} + +func (c *CorePtrs) SetBool(p mem.Ptr) { + if c.CoreTypeBool != mem.NullPtr { + panic("core ptr bool already set") + } + + c.CoreTypeBool = p +} + +func (c *CorePtrs) SetArray(p mem.Ptr) { + if c.CoreTypeArray != mem.NullPtr { + panic("core ptr array already set") + } + + c.CoreTypeArray = p +} + +func (c *CorePtrs) SetFunction(p mem.Ptr) { + if c.CoreTypeFunction != mem.NullPtr { + panic("core ptr function already set") + } + + c.CoreTypeFunction = p +} + +func (c *CorePtrs) SetTypeRef(p mem.Ptr) { + if c.CoreTypeTypeRef != mem.NullPtr { + panic("core ptr type ref already set") + } + + c.CoreTypeTypeRef = p +} + +func (c *CorePtrs) Complete() bool { + return c.CoreTypeNull != mem.NullPtr && + c.CoreTypeInt != mem.NullPtr && + c.CoreTypeFloat != mem.NullPtr && + c.CoreTypeString != mem.NullPtr && + c.CoreTypeBool != mem.NullPtr && + c.CoreTypeArray != mem.NullPtr && + c.CoreTypeFunction != mem.NullPtr && + c.CoreTypeTypeRef != mem.NullPtr +} |
