diff --git a/forge/builtins/builtins.go b/forge/builtins/builtins.go index 1cc61ec..3a29e46 100644 --- a/forge/builtins/builtins.go +++ b/forge/builtins/builtins.go @@ -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) }), diff --git a/forge/forge.go b/forge/forge.go index a440ca0..be7a169 100644 --- a/forge/forge.go +++ b/forge/forge.go @@ -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) } diff --git a/tests/forge_test.go b/tests/forge_test.go index 924ef22..65f6c91 100644 --- a/tests/forge_test.go +++ b/tests/forge_test.go @@ -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)