func (gb *GolangBackend) compileProgn(progn *gol.NodeProgn) (string, error) { if progn.Len() == 0 { return "", nil } first := true golangRetType, err := golangStringForType(progn.Type()) if err != nil { return "", err } lines := []string{fmt.Sprintf("func() %s {", golangRetType)} err = progn.ForeachLast(func(n gol.Node, last bool) error { if first { first = false return nil } s, err := gb.compile(n) if err != nil { return err } if last { s = "return " + s } lines = append(lines, s) return nil }) if err != nil { return "", err } lines = append(lines, ` }()`) return strings.Join(lines, "\n"), nil }