forge: convenience functions / typed calls (PopI)

This commit is contained in:
Helmut Merz 2023-09-11 08:21:11 +02:00
parent 5626840630
commit 5ae3f3e645
3 changed files with 10 additions and 9 deletions

View file

@ -28,24 +28,18 @@ func setup(f FE) *builtins {
return forge.Register(voc, forge.GoFunc(name, fct))
}
b := builtins{
Add: r("+", func(f FE, _ XT) {
f.Push(f.Pop().(int) + f.Pop().(int))
}),
Add: r("+", func(f FE, _ XT) { f.Push(f.PopI() + f.PopI()) }),
/*Append: r("append", func(f FE, _ XT) {
item := f.Pop()
f.Peek(0).(FPtr).Append(item)
}),*/
Body: r("body", func(f FE, _ XT) {
f.Push(f.Pop().(XT).Code().New().Next())
}),
Body: r("body", func(f FE, _ XT) { f.Push(f.Pop().(XT).Code().New().Next()) }),
Code: r("code", func(f FE, _ XT) { f.Push(f.Code()) }),
Comp: r("comp", func(f FE, _ XT) { f.LatestXT().Code().Append(f.Pop()) }),
Dup: r("dup", func(f FE, _ XT) { f.Push(f.Peek(0)) }),
Get: r("@", func(f FE, _ XT) { f.Push(f.Pop().(FPtr).Value()) }),
Lit: r("lit", func(f FE, _ XT) { f.Push(f.Literal()) }),
Mult: r("*", func(f FE, _ XT) {
f.Push(f.Pop().(int) * f.Pop().(int))
}),
Mult: r("*", func(f FE, _ XT) { f.Push(f.PopI() * f.PopI()) }),
New1: r("new1", func(f FE, _ XT) { f.Push(f.NewVar()) }),
Put: r("!", func(f FE, _ XT) { f.Pop().(FPtr).Set(f.Pop()) }),
Reg: r("reg", func(f FE, _ XT) { reg(f) }),

View file

@ -96,6 +96,10 @@ func (f *forgeEnv) Pop() fitem {
return f.ds.Pop()
}
func (f *forgeEnv) PopI() int {
return f.ds.Pop().(int)
}
func (f *forgeEnv) Peek(d int) fitem {
return f.ds.Peek(d)
}

View file

@ -44,6 +44,9 @@ func CoreTest(t *testing.T) {
t.AssertEqual(fe.Exec(seven).Pop(), 9)
}
func ControlTest(t *testing.T) {
}
func RepTest(t *testing.T) {
src := rep.Code(4, 2, "+")
c := src.Compile(fe)