From aa953a7b10c22ea4eaffa759ed6363c54155ffd7 Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Wed, 2 Aug 2023 16:57:40 +0200 Subject: [PATCH] forge: forge code variant: anonymous code, usable as XT --- forge/builtins/builtins.go | 2 +- forge/forge.go | 30 +++++++++++++++++++++++------- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/forge/builtins/builtins.go b/forge/builtins/builtins.go index 1c6bad4..3dbefe2 100644 --- a/forge/builtins/builtins.go +++ b/forge/builtins/builtins.go @@ -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(), diff --git a/forge/forge.go b/forge/forge.go index 5492d68..c0ca465 100644 --- a/forge/forge.go +++ b/forge/forge.go @@ -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 {