forge: convenience functions / typed calls (PopI)
This commit is contained in:
parent
5626840630
commit
5ae3f3e645
3 changed files with 10 additions and 9 deletions
|
@ -28,24 +28,18 @@ func setup(f FE) *builtins {
|
||||||
return forge.Register(voc, forge.GoFunc(name, fct))
|
return forge.Register(voc, forge.GoFunc(name, fct))
|
||||||
}
|
}
|
||||||
b := builtins{
|
b := builtins{
|
||||||
Add: r("+", func(f FE, _ XT) {
|
Add: r("+", func(f FE, _ XT) { f.Push(f.PopI() + f.PopI()) }),
|
||||||
f.Push(f.Pop().(int) + f.Pop().(int))
|
|
||||||
}),
|
|
||||||
/*Append: r("append", func(f FE, _ XT) {
|
/*Append: r("append", func(f FE, _ XT) {
|
||||||
item := f.Pop()
|
item := f.Pop()
|
||||||
f.Peek(0).(FPtr).Append(item)
|
f.Peek(0).(FPtr).Append(item)
|
||||||
}),*/
|
}),*/
|
||||||
Body: r("body", func(f FE, _ XT) {
|
Body: r("body", func(f FE, _ XT) { f.Push(f.Pop().(XT).Code().New().Next()) }),
|
||||||
f.Push(f.Pop().(XT).Code().New().Next())
|
|
||||||
}),
|
|
||||||
Code: r("code", func(f FE, _ XT) { f.Push(f.Code()) }),
|
Code: r("code", func(f FE, _ XT) { f.Push(f.Code()) }),
|
||||||
Comp: r("comp", func(f FE, _ XT) { f.LatestXT().Code().Append(f.Pop()) }),
|
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)) }),
|
Dup: r("dup", func(f FE, _ XT) { f.Push(f.Peek(0)) }),
|
||||||
Get: r("@", func(f FE, _ XT) { f.Push(f.Pop().(FPtr).Value()) }),
|
Get: r("@", func(f FE, _ XT) { f.Push(f.Pop().(FPtr).Value()) }),
|
||||||
Lit: r("lit", func(f FE, _ XT) { f.Push(f.Literal()) }),
|
Lit: r("lit", func(f FE, _ XT) { f.Push(f.Literal()) }),
|
||||||
Mult: r("*", func(f FE, _ XT) {
|
Mult: r("*", func(f FE, _ XT) { f.Push(f.PopI() * f.PopI()) }),
|
||||||
f.Push(f.Pop().(int) * f.Pop().(int))
|
|
||||||
}),
|
|
||||||
New1: r("new1", func(f FE, _ XT) { f.Push(f.NewVar()) }),
|
New1: r("new1", func(f FE, _ XT) { f.Push(f.NewVar()) }),
|
||||||
Put: r("!", func(f FE, _ XT) { f.Pop().(FPtr).Set(f.Pop()) }),
|
Put: r("!", func(f FE, _ XT) { f.Pop().(FPtr).Set(f.Pop()) }),
|
||||||
Reg: r("reg", func(f FE, _ XT) { reg(f) }),
|
Reg: r("reg", func(f FE, _ XT) { reg(f) }),
|
||||||
|
|
|
@ -96,6 +96,10 @@ func (f *forgeEnv) Pop() fitem {
|
||||||
return f.ds.Pop()
|
return f.ds.Pop()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (f *forgeEnv) PopI() int {
|
||||||
|
return f.ds.Pop().(int)
|
||||||
|
}
|
||||||
|
|
||||||
func (f *forgeEnv) Peek(d int) fitem {
|
func (f *forgeEnv) Peek(d int) fitem {
|
||||||
return f.ds.Peek(d)
|
return f.ds.Peek(d)
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,6 +44,9 @@ func CoreTest(t *testing.T) {
|
||||||
t.AssertEqual(fe.Exec(seven).Pop(), 9)
|
t.AssertEqual(fe.Exec(seven).Pop(), 9)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ControlTest(t *testing.T) {
|
||||||
|
}
|
||||||
|
|
||||||
func RepTest(t *testing.T) {
|
func RepTest(t *testing.T) {
|
||||||
src := rep.Code(4, 2, "+")
|
src := rep.Code(4, 2, "+")
|
||||||
c := src.Compile(fe)
|
c := src.Compile(fe)
|
||||||
|
|
Loading…
Add table
Reference in a new issue