From d0235d0ffe8b5cc6a4c4cf1c2efa991a5b546c50 Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Fri, 28 Jul 2023 23:08:09 +0200 Subject: [PATCH] XT: gofunc implementation --- forge/forge.go | 45 +++++++++++++++++++++++++++++++++++---------- 1 file changed, 35 insertions(+), 10 deletions(-) diff --git a/forge/forge.go b/forge/forge.go index 4acc677..ff2b0ad 100644 --- a/forge/forge.go +++ b/forge/forge.go @@ -45,7 +45,7 @@ var newVoc = voc.NewVoc[fitem] var newScalar = ptr.NewScalar[fitem] var newPtr = ptr.NewSlice[fitem] -// new XT ... +// XT (execution token) type XT interface { Name() string @@ -54,20 +54,45 @@ type XT interface { 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 { - name string + name fct Callable body fptr code fptr data fptr } -func (it *xitem) Name() string { - return it.name -} - func (it *xitem) Fct() Callable { return it.fct } @@ -82,12 +107,12 @@ func (it *xitem) Data() fptr { return it.body } -func Register(voc *fvoc, name string, fct Callable) *xitem { +func Register(voc *fvoc, n string, fct Callable) *xitem { it := xitem{ - name: name, + name: name(n), fct: fct, } - voc.Register(name, &it) + voc.Register(n, &it) return &it }