}
for _, c := range equivalentCases {
if !Equiv(c.f.f, c.g.f) {
- t.Errorf("expected equivalence. Func definitions:")
- // TODO(matloob): Rewrite PrintFunc to output to a string or writer,
- // so the functions can be written to the error log.
- PrintFunc(c.f.f)
- PrintFunc(c.g.f)
+ t.Error("expected equivalence. Func definitions:")
+ t.Error(c.f.f)
+ t.Error(c.g.f)
}
}
}
for _, c := range differentCases {
if Equiv(c.f.f, c.g.f) {
- t.Errorf("expected difference. Func definitions:")
- // TODO(matloob): Rewrite PrintFunc to output to a string or writer,
- // so the functions can be written to the error log.
- PrintFunc(c.f.f)
- PrintFunc(c.g.f)
+ t.Error("expected difference. Func definitions:")
+ t.Error(c.f.f)
+ t.Error(c.g.f)
}
}
}
package ssa
-import "fmt"
+import (
+ "bytes"
+ "fmt"
+ "io"
+ "os"
+)
func printFunc(f *Func) {
- fmt.Print(f.Name)
- fmt.Print(" ")
- fmt.Println(f.Type)
+ fprintFunc(os.Stdout, f)
+}
+
+func (f *Func) String() string {
+ var buf bytes.Buffer
+ fprintFunc(&buf, f)
+ return buf.String()
+}
+
+func fprintFunc(w io.Writer, f *Func) {
+ fmt.Fprint(w, f.Name)
+ fmt.Fprint(w, " ")
+ fmt.Fprintln(w, f.Type)
printed := make([]bool, f.NumValues())
for _, b := range f.Blocks {
- fmt.Printf(" b%d:\n", b.ID)
+ fmt.Fprintf(w, " b%d:\n", b.ID)
n := 0
// print phis first since all value cycles contain a phi
if v.Op != OpPhi {
continue
}
- fmt.Print(" ")
- fmt.Println(v.LongString())
+ fmt.Fprint(w, " ")
+ fmt.Fprintln(w, v.LongString())
printed[v.ID] = true
n++
}
continue outer
}
}
- fmt.Print(" ")
- fmt.Println(v.LongString())
+ fmt.Fprint(w, " ")
+ fmt.Fprintln(w, v.LongString())
printed[v.ID] = true
n++
}
if m == n {
- fmt.Println("dependency cycle!")
+ fmt.Fprintln(w, "dependency cycle!")
for _, v := range b.Values {
if printed[v.ID] {
continue
}
- fmt.Print(" ")
- fmt.Println(v.LongString())
+ fmt.Fprint(w, " ")
+ fmt.Fprintln(w, v.LongString())
printed[v.ID] = true
n++
}
}
}
- fmt.Println(" " + b.LongString())
+ fmt.Fprintln(w, " "+b.LongString())
}
}