Remove several uses of stringsCompare.
Passes go build -a -toolexec 'toolstash -cmp' std cmd.
Change-Id: I3f2323df2ad8c03bad77e0a91d6e2e714803705b
Reviewed-on: https://go-review.googlesource.com/14556
Reviewed-by: Dave Cheney <dave@cheney.net>
}
}
+// methodbyname sorts types by symbol name.
type methodbyname []*Type
-func (x methodbyname) Len() int {
- return len(x)
-}
-
-func (x methodbyname) Swap(i, j int) {
- x[i], x[j] = x[j], x[i]
-}
-
-func (x methodbyname) Less(i, j int) bool {
- a := x[i]
- b := x[j]
- return stringsCompare(a.Sym.Name, b.Sym.Name) < 0
-}
+func (x methodbyname) Len() int { return len(x) }
+func (x methodbyname) Swap(i, j int) { x[i], x[j] = x[j], x[i] }
+func (x methodbyname) Less(i, j int) bool { return x[i].Sym.Name < x[j].Sym.Name }
func dumpexporttype(t *Type) {
if t == nil {
return
}
- n := 0
+ var m []*Type
for f := t.Method; f != nil; f = f.Down {
dumpexporttype(f)
- n++
- }
-
- m := make([]*Type, n)
- i := 0
- for f := t.Method; f != nil; f = f.Down {
- m[i] = f
- i++
+ m = append(m, f)
}
- sort.Sort(methodbyname(m[:n]))
+ sort.Sort(methodbyname(m))
fmt.Fprintf(bout, "\ttype %v %v\n", Sconv(t.Sym, obj.FmtSharp), Tconv(t, obj.FmtSharp|obj.FmtLong))
- var f *Type
- for i := 0; i < n; i++ {
- f = m[i]
+ for _, f := range m {
if f.Nointerface {
fmt.Fprintf(bout, "\t//go:nointerface\n")
}
removed bool // removed from program
}
+// startcmp sorts TempVars by start, then id, then symbol name.
type startcmp []*TempVar
-func (x startcmp) Len() int {
- return len(x)
-}
-
-func (x startcmp) Swap(i, j int) {
- x[i], x[j] = x[j], x[i]
-}
-
+func (x startcmp) Len() int { return len(x) }
+func (x startcmp) Swap(i, j int) { x[i], x[j] = x[j], x[i] }
func (x startcmp) Less(i, j int) bool {
a := x[i]
b := x[j]
return int(a.def.Id-b.def.Id) < 0
}
if a.node != b.node {
- return stringsCompare(a.node.Sym.Name, b.node.Sym.Name) < 0
+ return a.node.Sym.Name < b.node.Sym.Name
}
return false
}
for i := 0; i < len(var_); i++ {
bystart[i] = &var_[i]
}
- sort.Sort(startcmp(bystart[:len(var_)]))
+ sort.Sort(startcmp(bystart))
// List of in-use variables, sorted by end, so that the ones that
// will last the longest are the earliest ones in the array.
return t
}
+// methcmp sorts by symbol, then by package path for unexported symbols.
type methcmp []*Type
-func (x methcmp) Len() int {
- return len(x)
-}
-
-func (x methcmp) Swap(i, j int) {
- x[i], x[j] = x[j], x[i]
-}
-
+func (x methcmp) Len() int { return len(x) }
+func (x methcmp) Swap(i, j int) { x[i], x[j] = x[j], x[i] }
func (x methcmp) Less(i, j int) bool {
a := x[i]
b := x[j]
return true
}
if b.Sym == nil {
- return 1 < 0
+ return false
}
- k := stringsCompare(a.Sym.Name, b.Sym.Name)
- if k != 0 {
- return k < 0
+ if a.Sym.Name != b.Sym.Name {
+ return a.Sym.Name < b.Sym.Name
}
if !exportname(a.Sym.Name) {
- k := stringsCompare(a.Sym.Pkg.Path, b.Sym.Pkg.Path)
- if k != 0 {
- return k < 0
+ if a.Sym.Pkg.Path != b.Sym.Pkg.Path {
+ return a.Sym.Pkg.Path < b.Sym.Pkg.Path
}
}
return t
}
- i := 0
+ var a []*Type
for f := t.Type; f != nil; f = f.Down {
- i++
- }
- a := make([]*Type, i)
- i = 0
- var f *Type
- for f = t.Type; f != nil; f = f.Down {
- a[i] = f
- i++
+ a = append(a, f)
}
- sort.Sort(methcmp(a[:i]))
- for i--; i >= 0; i-- {
- a[i].Down = f
- f = a[i]
+ sort.Sort(methcmp(a))
+
+ n := len(a) // n > 0 due to initial conditions.
+ for i := 0; i < n-1; i++ {
+ a[i].Down = a[i+1]
}
+ a[n-1].Down = nil
- t.Type = f
+ t.Type = a[0]
return t
}