diff --git a/forge/builtins/builtins.go b/forge/builtins/builtins.go index 28769bb..a752388 100644 --- a/forge/builtins/builtins.go +++ b/forge/builtins/builtins.go @@ -6,7 +6,7 @@ type FE = forge.FE type XT = forge.XT type builtins struct { - Add, Comp, Dup, Get, Here, Lit, Mult, New, Put, Reg XT + Add, Dup, Get, Lit, Mult, Put, Reg XT } func Get(f FE) *builtins { @@ -26,13 +26,10 @@ func setup(f FE) *builtins { } b := builtins{ Add: r("+", func(f FE, _ XT) { f.Push(f.Pop().(int) + f.Pop().(int)) }), - Comp: r("comp", func(f FE, _ XT) { f.Compile(f.Pop()) }), Dup: r("dup", func(f FE, _ XT) { f.Push(f.Peek(0)) }), Get: r("@", func(f FE, _ XT) { f.Push(f.Pop().(forge.FPtr).Value()) }), - Here: r("here", func(f FE, _ XT) { f.Push(f.Here()) }), Lit: r("literal", func(f FE, _ XT) { f.Push(f.Literal()) }), Mult: r("*", func(f FE, _ XT) { f.Push(f.Pop().(int) * f.Pop().(int)) }), - New: r("new", func(f FE, _ XT) { f.New() }), Put: r("!", func(f FE, _ XT) { f.Pop().(forge.FPtr).Set(f.Pop()) }), Reg: r("reg", func(f FE, _ XT) { f.Push(forge.Register(voc, diff --git a/forge/forge.go b/forge/forge.go index 68aa6b9..c23ba17 100644 --- a/forge/forge.go +++ b/forge/forge.go @@ -174,18 +174,8 @@ func (f *forgeEnv) Create(name string, value fitem, code fptr) XT { // core methods -func (f *forgeEnv) New() { - f.cp = newPtr() -} - -func (f *forgeEnv) Compile(its ...fitem) { - for _, it := range its { - f.cp.Append(it) - } -} - -func (f *forgeEnv) Here() fptr { - return f.cp.Clone() +func (f *forgeEnv) NewVar() fptr { + return newScalar() } func (f *forgeEnv) Literal() fitem { diff --git a/tests/forge_test.go b/tests/forge_test.go index 39a2959..d71fb2f 100644 --- a/tests/forge_test.go +++ b/tests/forge_test.go @@ -25,22 +25,23 @@ func ExecTest(t *testing.T) { fe.Exec(b.Lit, 3, sq, b.Lit, 2, b.Add) t.AssertEqual(fe.Pop(), 11) seven := fe.Create("seven", 7, fe.Code(b.Get)) - //fe.Exec(b.Lit, 7, seven, b.Put) fe.Exec(b.Lit, 3, seven, sq, b.Add) t.AssertEqual(fe.Pop(), 52) } func CoreTest(t *testing.T) { - //sq := fe.Def("square", b.Dup, b.Mult) - //fe.Comp(b.Dup, b.Mult); fe.Exec(b.Lit, "square", b.def) - fe.Exec(b.New, b.Here) - fe.Exec(b.Lit, b.Dup, b.Comp, b.Lit, b.Mult, b.Comp, b.Lit, "square", b.Reg) + fe.Push(fe.Code(b.Dup, b.Mult)) + fe.Exec(b.Lit, "square", b.Reg) sq := fe.Pop() - //seven := fe.Const("seven", 7) - //fe.Exec(b.Lit, 7, b.Lit, "seven", b.const) - fe.Exec(b.New, b.Here) - fe.Exec(b.Lit, b.Lit, b.Comp, b.Lit, 7, b.Comp, b.Lit, "seven", b.Reg) + fe.Push(fe.Code(b.Lit, 7)) + fe.Exec(b.Lit, "seven", b.Reg) seven := fe.Pop() fe.Exec(b.Lit, 3, seven, sq, b.Add) t.AssertEqual(fe.Pop(), 52) + fe.Push(fe.Code(b.Lit, fe.NewVar())) + fe.Exec(b.Lit, "myvar", b.Reg) + myvar := fe.Pop() + fe.Exec(b.Lit, 5, myvar, b.Put) + fe.Exec(seven, myvar, b.Get, b.Mult) + t.AssertEqual(fe.Pop(), 35) }