forge: forge code variant: anonymous code, usable as XT

This commit is contained in:
Helmut Merz 2023-08-02 16:57:40 +02:00
parent b88ef658ee
commit aa953a7b10
2 changed files with 24 additions and 8 deletions

View file

@ -55,7 +55,7 @@ func reg(f FE, _ XT) {
func create(f FE, xt XT) {
name := f.Pop().(string)
does := forge.FCode("", f.Pop().(FPtr))
does := forge.AnonCode(f.Pop().(FPtr))
f.Push(forge.Register(f.Voc(),
forge.GoFunc(name, func(f FE, xt XT) {
f.Push(forge.Register(f.Voc(),

View file

@ -86,25 +86,41 @@ func (it *gofunc) Code() fptr {
return nil
}
// fcode: with forge code
// acode (anonymous code), fcode: forge code
type fcode struct {
name
type acode struct {
code fptr
}
func FCode(n string, c fptr) XT {
return &fcode{name(n), c}
func AnonCode(c fptr) XT {
return &acode{c}
}
func (it *fcode) Fct() Callable {
func (it *acode) Name() string {
return ""
}
func (it *acode) Fct() Callable {
return doFCode
}
func (it *fcode) Code() fptr {
func (it *acode) Code() fptr {
return it.code
}
type fcode struct {
name
acode
}
func FCode(n string, c fptr) XT {
return &fcode{name(n), acode{c}}
}
func (it *fcode) Name() string {
return string(it.name)
}
// forgeEnv methods
func (f *forgeEnv) Code(items ...fitem) fptr {