diff --git a/publicsuffix/gen.go b/publicsuffix/gen.go index 7f7d08dbc..5f454e57e 100644 --- a/publicsuffix/gen.go +++ b/publicsuffix/gen.go @@ -21,6 +21,7 @@ package main import ( "bufio" "bytes" + "cmp" "encoding/binary" "flag" "fmt" @@ -29,7 +30,7 @@ import ( "net/http" "os" "regexp" - "sort" + "slices" "strings" "golang.org/x/net/idna" @@ -62,20 +63,6 @@ var ( maxLo uint32 ) -func max(a, b int) int { - if a < b { - return b - } - return a -} - -func u32max(a, b uint32) uint32 { - if a < b { - return b - } - return a -} - const ( nodeTypeNormal = 0 nodeTypeException = 1 @@ -83,18 +70,6 @@ const ( numNodeType = 3 ) -func nodeTypeStr(n int) string { - switch n { - case nodeTypeNormal: - return "+" - case nodeTypeException: - return "!" - case nodeTypeParentOnly: - return "o" - } - panic("unreachable") -} - const ( defaultURL = "https://publicsuffix.org/list/effective_tld_names.dat" gitCommitURL = "https://api.github.com/repos/publicsuffix/list/commits?path=public_suffix_list.dat" @@ -251,7 +226,7 @@ func main1() error { for label := range labelsMap { labelsList = append(labelsList, label) } - sort.Strings(labelsList) + slices.Sort(labelsList) combinedText = combineText(labelsList) if combinedText == "" { @@ -509,15 +484,13 @@ func (n *node) child(label string) *node { icann: true, } n.children = append(n.children, c) - sort.Sort(byLabel(n.children)) + slices.SortFunc(n.children, byLabel) return c } -type byLabel []*node - -func (b byLabel) Len() int { return len(b) } -func (b byLabel) Swap(i, j int) { b[i], b[j] = b[j], b[i] } -func (b byLabel) Less(i, j int) bool { return b[i].label < b[j].label } +func byLabel(a, b *node) int { + return strings.Compare(a.label, b.label) +} var nextNodesIndex int @@ -557,7 +530,7 @@ func assignIndexes(n *node) error { n.childrenIndex = len(childrenEncoding) lo := uint32(n.firstChild) hi := lo + uint32(len(n.children)) - maxLo, maxHi = u32max(maxLo, lo), u32max(maxHi, hi) + maxLo, maxHi = max(maxLo, lo), max(maxHi, hi) if lo >= 1< 0 && ss[0] == "" { ss = ss[1:] } diff --git a/publicsuffix/list.go b/publicsuffix/list.go index d56e9e762..56069d042 100644 --- a/publicsuffix/list.go +++ b/publicsuffix/list.go @@ -88,7 +88,7 @@ func PublicSuffix(domain string) (publicSuffix string, icann bool) { s, suffix, icannNode, wildcard := domain, len(domain), false, false loop: for { - dot := strings.LastIndex(s, ".") + dot := strings.LastIndexByte(s, '.') if wildcard { icann = icannNode suffix = 1 + dot @@ -129,7 +129,7 @@ loop: } if suffix == len(domain) { // If no rules match, the prevailing rule is "*". - return domain[1+strings.LastIndex(domain, "."):], icann + return domain[1+strings.LastIndexByte(domain, '.'):], icann } return domain[suffix:], icann } @@ -178,26 +178,28 @@ func EffectiveTLDPlusOne(domain string) (string, error) { if domain[i] != '.' { return "", fmt.Errorf("publicsuffix: invalid public suffix %q for domain %q", suffix, domain) } - return domain[1+strings.LastIndex(domain[:i], "."):], nil + return domain[1+strings.LastIndexByte(domain[:i], '.'):], nil } type uint32String string func (u uint32String) get(i uint32) uint32 { off := i * 4 - return (uint32(u[off])<<24 | - uint32(u[off+1])<<16 | - uint32(u[off+2])<<8 | - uint32(u[off+3])) + u = u[off:] // help the compiler reduce bounds checks + return uint32(u[3]) | + uint32(u[2])<<8 | + uint32(u[1])<<16 | + uint32(u[0])<<24 } type uint40String string func (u uint40String) get(i uint32) uint64 { off := uint64(i * (nodesBits / 8)) - return uint64(u[off])<<32 | - uint64(u[off+1])<<24 | - uint64(u[off+2])<<16 | - uint64(u[off+3])<<8 | - uint64(u[off+4]) + u = u[off:] // help the compiler reduce bounds checks + return uint64(u[4]) | + uint64(u[3])<<8 | + uint64(u[2])<<16 | + uint64(u[1])<<24 | + uint64(u[0])<<32 }