forge: create scalar variable with 'var1' - defined as forge code
This commit is contained in:
parent
98231b070b
commit
0027b21a44
3 changed files with 13 additions and 15 deletions
|
@ -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,8 +38,8 @@ func setup(f FE) *builtins {
|
|||
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()) }),
|
||||
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()) }),
|
||||
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
@ -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())
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Add table
Reference in a new issue