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) { func create(f FE, xt XT) {
name := f.Pop().(string) name := f.Pop().(string)
does := forge.FCode("", f.Pop().(FPtr)) does := forge.AnonCode(f.Pop().(FPtr))
f.Push(forge.Register(f.Voc(), f.Push(forge.Register(f.Voc(),
forge.GoFunc(name, func(f FE, xt XT) { forge.GoFunc(name, func(f FE, xt XT) {
f.Push(forge.Register(f.Voc(), f.Push(forge.Register(f.Voc(),

View file

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