XT: gofunc implementation
This commit is contained in:
parent
25333f5ab2
commit
d0235d0ffe
1 changed files with 35 additions and 10 deletions
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue