package rep import ( "fmt" "git.sr.ht/~cco/go-scopes/forge" ) // maybe: code, defs, string, int, float type citem interface{} // code, represented by a slice type code []citem func Code(items ...citem) code { return code(items) } func (ci code) Compile(f forge.FE) forge.FPtr { c := f.Code() for _, item := range ci { switch i := item.(type) { case int: c.Append(i) case string: if v, err := compStr(f, i); err == nil { c.Append(v) } else { fmt.Println(err) } } } return c.Reset() } func compStr(f forge.FE, s string) (forge.FItem, error) { if v, ok := f.Voc().Lookup(s); ok { return forge.FItem(v), nil } return nil, fmt.Errorf("not found: %s", s) } // defs - definitions, represented by a map type defs map[string]citem