put XT definitions in separate source file; get rid of 'name' type
This commit is contained in:
parent
86fe7ca04f
commit
0852ba19fd
4 changed files with 75 additions and 74 deletions
|
@ -46,6 +46,8 @@ func setup(f FE) *builtins {
|
|||
f.Register(forge.FCode(f.Pop().(string), f.Code(f.NewVar())))
|
||||
}),
|
||||
}
|
||||
// b.Var1 = forge.Register(voc, forge.FCode("var1",
|
||||
//f.Code(f.Code(b.New1), b.Swap, b.Reg)))
|
||||
return &b
|
||||
}
|
||||
|
||||
|
|
|
@ -49,79 +49,6 @@ var newVoc = voc.NewVoc[fitem]
|
|||
var newScalar = ptr.NewScalar[fitem]
|
||||
var newPtr = ptr.NewSlice[fitem]
|
||||
|
||||
// XT (execution token)
|
||||
|
||||
type XT interface {
|
||||
Name() string
|
||||
Fct() Callable
|
||||
Code() fptr
|
||||
}
|
||||
|
||||
type name string
|
||||
|
||||
func (n name) Name() string {
|
||||
return string(n)
|
||||
}
|
||||
|
||||
func Register(voc *fvoc, it XT) XT {
|
||||
voc.Register(it.Name(), it)
|
||||
return it
|
||||
}
|
||||
|
||||
// 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
|
||||
}
|
||||
|
||||
// acode (anonymous code), fcode: forge code
|
||||
|
||||
type acode struct {
|
||||
code fptr
|
||||
}
|
||||
|
||||
func AnonCode(c fptr) XT {
|
||||
return &acode{c}
|
||||
}
|
||||
|
||||
func (it *acode) Name() string {
|
||||
return ""
|
||||
}
|
||||
|
||||
func (it *acode) Fct() Callable {
|
||||
return doFCode
|
||||
}
|
||||
|
||||
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 {
|
||||
|
|
72
forge/xt.go
Normal file
72
forge/xt.go
Normal file
|
@ -0,0 +1,72 @@
|
|||
package forge
|
||||
|
||||
// XT (execution token)
|
||||
|
||||
type XT interface {
|
||||
Name() string
|
||||
Fct() Callable
|
||||
Code() fptr
|
||||
}
|
||||
|
||||
func Register(voc *fvoc, it XT) XT {
|
||||
voc.Register(it.Name(), it)
|
||||
return it
|
||||
}
|
||||
|
||||
// gofunc: XT consisting only of a function written in Go
|
||||
|
||||
type gofunc struct {
|
||||
fct Callable
|
||||
name string
|
||||
}
|
||||
|
||||
func GoFunc(n string, fct Callable) XT {
|
||||
return &gofunc{fct, n}
|
||||
}
|
||||
|
||||
func (it *gofunc) Fct() Callable {
|
||||
return it.fct
|
||||
}
|
||||
|
||||
func (it *gofunc) Code() fptr {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (it *gofunc) Name() string {
|
||||
return string(it.name)
|
||||
}
|
||||
|
||||
// acode (anonymous code), fcode: forge code
|
||||
|
||||
type acode struct {
|
||||
code fptr
|
||||
}
|
||||
|
||||
func AnonCode(c fptr) XT {
|
||||
return &acode{c}
|
||||
}
|
||||
|
||||
func (it *acode) Fct() Callable {
|
||||
return doFCode
|
||||
}
|
||||
|
||||
func (it *acode) Code() fptr {
|
||||
return it.code
|
||||
}
|
||||
|
||||
func (it *acode) Name() string {
|
||||
return ""
|
||||
}
|
||||
|
||||
type fcode struct {
|
||||
acode
|
||||
name string
|
||||
}
|
||||
|
||||
func FCode(n string, c fptr) XT {
|
||||
return &fcode{acode{c}, n}
|
||||
}
|
||||
|
||||
func (it *fcode) Name() string {
|
||||
return string(it.name)
|
||||
}
|
|
@ -34,7 +34,7 @@ func CoreTest(t *testing.T) {
|
|||
//myvar := fe.Exec(fe.Code(fe.NewVar()), "myvar", b.Reg).Pop()
|
||||
dvar := fe.Exec(fe.Code(), "var", b.Create).LatestXT()
|
||||
myvar := fe.Exec("myvar", dvar).LatestXT()
|
||||
//myvar := fe.Exec("myvar", b.Var).Pop()
|
||||
//myvar := fe.Exec("myvar", b.Var1).LatestXT()
|
||||
fe.Exec(5, myvar, b.Put)
|
||||
fe.Exec(seven, myvar, b.Get, b.Mult)
|
||||
t.AssertEqual(fe.Pop(), 35)
|
||||
|
|
Loading…
Add table
Reference in a new issue