XT: gofunc implementation

This commit is contained in:
Helmut Merz 2023-07-28 23:08:09 +02:00
parent 25333f5ab2
commit d0235d0ffe

View file

@ -45,7 +45,7 @@ var newVoc = voc.NewVoc[fitem]
var newScalar = ptr.NewScalar[fitem] var newScalar = ptr.NewScalar[fitem]
var newPtr = ptr.NewSlice[fitem] var newPtr = ptr.NewSlice[fitem]
// new XT ... // XT (execution token)
type XT interface { type XT interface {
Name() string Name() string
@ -54,20 +54,45 @@ type XT interface {
Data() fptr Data() fptr
} }
// xitem (executable item) / XT (execution token) type name string
func (n name) Name() string {
return string(n)
}
// gofunc: XT consisting only of a function written in Go
type gofunc struct {
name
fct Callable
}
func GoFunc(n string, fct Callable) XT {
return &gofunc{name(n), fct}
}
func (it *gofunc) Fct() Callable {
return it.fct
}
func (it *gofunc) Code() fptr {
return nil
}
func (it *gofunc) Data() fptr {
return nil
}
// xitem: executable item with all parts
type xitem struct { type xitem struct {
name string name
fct Callable fct Callable
body fptr body fptr
code fptr code fptr
data fptr data fptr
} }
func (it *xitem) Name() string {
return it.name
}
func (it *xitem) Fct() Callable { func (it *xitem) Fct() Callable {
return it.fct return it.fct
} }
@ -82,12 +107,12 @@ func (it *xitem) Data() fptr {
return it.body return it.body
} }
func Register(voc *fvoc, name string, fct Callable) *xitem { func Register(voc *fvoc, n string, fct Callable) *xitem {
it := xitem{ it := xitem{
name: name, name: name(n),
fct: fct, fct: fct,
} }
voc.Register(name, &it) voc.Register(n, &it)
return &it return &it
} }