diff --git a/forge/rep/rep.go b/forge/rep/rep.go index 953565b..f9618b9 100644 --- a/forge/rep/rep.go +++ b/forge/rep/rep.go @@ -2,11 +2,12 @@ package rep import ( "fmt" + "strings" "git.sr.ht/~cco/go-scopes/forge" ) -// maybe: code, defs, string, int, float +// may be: code, defs, string, int, float type citem interface{} // code, represented by a slice @@ -29,12 +30,17 @@ func (ci code) Compile(f forge.FE) forge.FPtr { } else { fmt.Println(err) } + case code: + c.Append(i.Compile(f)) } } return c.Reset() } func compStr(f forge.FE, s string) (forge.FItem, error) { + if strings.HasPrefix(s, "'") { + return forge.FItem(strings.Trim(s, "'")), nil + } if v, ok := f.Voc().Lookup(s); ok { return forge.FItem(v), nil } diff --git a/tests/forge_test.go b/tests/forge_test.go index 50929cd..7230598 100644 --- a/tests/forge_test.go +++ b/tests/forge_test.go @@ -43,4 +43,8 @@ func RepTest(t *testing.T) { c := src.Compile(fe) fe.Call(c) t.AssertEqual(fe.Pop(), 6) + src = rep.Code(rep.Code("dup", "dup", "*", "*"), "'cube'", "reg") + fe.Call(src.Compile(fe)) + fe.Call(rep.Code(3, "cube").Compile(fe)) + t.AssertEqual(fe.Pop(), 27) }