diff --git a/forge/rep/json.go b/forge/rep/json.go index 2437a92..f95c390 100644 --- a/forge/rep/json.go +++ b/forge/rep/json.go @@ -19,17 +19,9 @@ func ParseJson(inp string) coderep { func prepare(raw interface{}) coderep { switch ri := raw.(type) { case []interface{}: - c := code{} - for _, it := range ri { - c = append(c, it) - } - return c + return makeCode(ri) case map[string]interface{}: - m := module{} - for k, v := range ri { - m[k] = v - } - return m + return makeModule(ri) } return nil } diff --git a/forge/rep/rep.go b/forge/rep/rep.go index 6b2da0b..871b007 100644 --- a/forge/rep/rep.go +++ b/forge/rep/rep.go @@ -42,6 +42,12 @@ func (ci code) Compile(f forge.FE) forge.FPtr { } case code: c.Append(i.Compile(f)) + case []interface{}: + c.Append(makeCode(i).Compile(f)) + case module: + c.Append(i.Compile(f)) + case map[string]interface{}: + c.Append(makeModule(i).Compile(f)) } } return c.Reset() @@ -57,6 +63,14 @@ func compStr(f forge.FE, s string) (forge.FItem, error) { return nil, fmt.Errorf("not found: %s", s) } +func makeCode(ri []interface{}) code { + c := code{} + for _, it := range ri { + c = append(c, it) + } + return c +} + // module - code definitions, represented by a map type module map[string]citem @@ -65,3 +79,11 @@ func (m module) Compile(f forge.FE) forge.FPtr { v := voc.NewVoc(f.Voc()) return f.Code(v) } + +func makeModule(ri map[string]interface{}) module { + m := module{} + for k, v := range ri { + m[k] = v + } + return m +}