package value import ( "jinx/pkg/lang/vm/mem" ) // 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 }