diff --git a/forge/builtins/builtins.go b/forge/builtins/builtins.go index 0fe4d06..f4f24db 100644 --- a/forge/builtins/builtins.go +++ b/forge/builtins/builtins.go @@ -9,7 +9,8 @@ type XT = forge.XT type FPtr = forge.FPtr type builtins struct { - Add, Body, Comp, Create, Dup, Get, Lit, Mult, New1, Put, Reg, Swap, Var XT + Add, Body, Code, Comp, Dup, Get, Lit, Mult, New1, Put, Reg, Swap XT + Var1 XT } func Get(f FE) *builtins { @@ -37,11 +38,11 @@ func setup(f FE) *builtins { Body: r("body", func(f FE, _ XT) { f.Push(f.Pop().(XT).Code().New().Next()) }), - Comp: r("comp", func(f FE, _ XT) { f.LatestXT().Code().Append(f.Pop()) }), - Create: r("create", create), - 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()) }), + 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)) }), @@ -54,12 +55,11 @@ func setup(f FE) *builtins { f.Push(a) f.Push(b) }), - Var: r("var", func(f FE, _ XT) { - f.Register(forge.FCode(f.Pop().(string), f.Code(f.NewVar()))) - }), } - // b.Var1 = forge.Register(voc, forge.FCode("var1", - //f.Code(b.Code, b.Swap, b.Reg, b.New1, b.Comp))) + rf := func(name string, code ...forge.FItem) XT { + return forge.Register(voc, forge.FCode(name, f.Code(code...))) + } + b.Var1 = rf("var1", b.Code, b.Swap, b.Reg, b.New1, b.Comp) return &b } diff --git a/forge/forge.go b/forge/forge.go index bc1c8ae..925175c 100644 --- a/forge/forge.go +++ b/forge/forge.go @@ -112,5 +112,5 @@ func (f *forgeEnv) Register(xt XT) { // basic functions for executable items func doFCode(f *forgeEnv, xt XT) { - f.Call(xt.Code()) + f.Call(xt.Code().New()) } diff --git a/tests/forge_test.go b/tests/forge_test.go index 6ed5e82..2d471e1 100644 --- a/tests/forge_test.go +++ b/tests/forge_test.go @@ -32,9 +32,7 @@ func CoreTest(t *testing.T) { fe.Exec(3, seven, sq, b.Add) t.AssertEqual(fe.Pop(), 52) //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.Var1).LatestXT() + 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)