37 lines
607 B
Go
37 lines
607 B
Go
package main
|
|
|
|
import "fmt"
|
|
|
|
type Class struct {
|
|
name string
|
|
}
|
|
|
|
type ClassInstance struct {
|
|
klass *Class
|
|
props map[string]any
|
|
}
|
|
|
|
func (c *ClassInstance) String() string {
|
|
return fmt.Sprintf("instance of %s", c.klass.name)
|
|
}
|
|
|
|
func (c *ClassInstance) get(name string) (any, bool) {
|
|
val, ok := c.props[name]
|
|
return val, ok
|
|
}
|
|
|
|
func (c *ClassInstance) set(name string, val any) {
|
|
c.props[name] = val
|
|
}
|
|
|
|
func (c *Class) arity() int {
|
|
return 0
|
|
}
|
|
|
|
func (c *Class) call(i *Interpreter, args ...any) (ret any) {
|
|
return &ClassInstance{c, map[string]any{}}
|
|
}
|
|
|
|
func (c *Class) String() string {
|
|
return c.name
|
|
}
|