]> Cypherpunks repositories - gostls13.git/commitdiff
unicode/utf8: minor code simplification
authorRui Ueyama <ruiu@google.com>
Sun, 23 Mar 2014 22:44:29 +0000 (15:44 -0700)
committerIan Lance Taylor <iant@golang.org>
Sun, 23 Mar 2014 22:44:29 +0000 (15:44 -0700)
It's a little bit waste to check if r is not a surrogate
code point because RuneError is not a surrogate code point.

LGTM=iant
R=golang-codereviews, iant
CC=golang-codereviews
https://golang.org/cl/79230043

src/pkg/unicode/utf8/utf8.go

index 93d0be5e0c180ea9aba29ef4f3f3f4b7210c6b80..0dc859a041bf7623c11d8420bc365647fc8083bf 100644 (file)
@@ -329,37 +329,29 @@ func RuneLen(r rune) int {
 // It returns the number of bytes written.
 func EncodeRune(p []byte, r rune) int {
        // Negative values are erroneous.  Making it unsigned addresses the problem.
-       if uint32(r) <= rune1Max {
+       switch i := uint32(r); {
+       case i <= rune1Max:
                p[0] = byte(r)
                return 1
-       }
-
-       if uint32(r) <= rune2Max {
+       case i <= rune2Max:
                p[0] = t2 | byte(r>>6)
                p[1] = tx | byte(r)&maskx
                return 2
-       }
-
-       if uint32(r) > MaxRune {
+       case i > MaxRune, surrogateMin <= i && i <= surrogateMax:
                r = RuneError
-       }
-
-       if surrogateMin <= r && r <= surrogateMax {
-               r = RuneError
-       }
-
-       if uint32(r) <= rune3Max {
+               fallthrough
+       case i <= rune3Max:
                p[0] = t3 | byte(r>>12)
                p[1] = tx | byte(r>>6)&maskx
                p[2] = tx | byte(r)&maskx
                return 3
+       default:
+               p[0] = t4 | byte(r>>18)
+               p[1] = tx | byte(r>>12)&maskx
+               p[2] = tx | byte(r>>6)&maskx
+               p[3] = tx | byte(r)&maskx
+               return 4
        }
-
-       p[0] = t4 | byte(r>>18)
-       p[1] = tx | byte(r>>12)&maskx
-       p[2] = tx | byte(r>>6)&maskx
-       p[3] = tx | byte(r)&maskx
-       return 4
 }
 
 // RuneCount returns the number of runes in p.  Erroneous and short