]> Cypherpunks repositories - gostls13.git/commitdiff
strconv: rely on utf8.AppendRune
authorJoe Tsai <joetsai@digital-static.net>
Thu, 16 Jun 2022 00:39:59 +0000 (17:39 -0700)
committerJoseph Tsai <joetsai@digital-static.net>
Thu, 17 Aug 2023 05:23:49 +0000 (05:23 +0000)
This is both simpler and more performant.

Quote             268ns ± 5%   258ns ± 4%  -3.70%  (p=0.014 n=10+10)
QuoteRune        28.9ns ± 3%  28.4ns ± 4%    ~     (p=0.113 n=9+10)
AppendQuote       165ns ± 3%   165ns ± 3%    ~     (p=0.661 n=9+10)
AppendQuoteRune  8.05ns ± 5%  7.75ns ± 7%    ~     (p=0.065 n=10+9)

Change-Id: Ib0ee332e970d4986026c05e5e0e368f41eff7977
Reviewed-on: https://go-review.googlesource.com/c/go/+/412338
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@google.com>
Run-TryBot: Joseph Tsai <joetsai@digital-static.net>
Reviewed-by: Robert Griesemer <gri@google.com>
src/strconv/quote.go

index 1b5bddfeaea7bc27e7184f5bc162d93106c5a484..7c384336795fde097e5c46515fef4950b1995874 100644 (file)
@@ -66,7 +66,6 @@ func appendQuotedRuneWith(buf []byte, r rune, quote byte, ASCIIonly, graphicOnly
 }
 
 func appendEscapedRune(buf []byte, r rune, quote byte, ASCIIonly, graphicOnly bool) []byte {
-       var runeTmp [utf8.UTFMax]byte
        if r == rune(quote) || r == '\\' { // always backslashed
                buf = append(buf, '\\')
                buf = append(buf, byte(r))
@@ -78,9 +77,7 @@ func appendEscapedRune(buf []byte, r rune, quote byte, ASCIIonly, graphicOnly bo
                        return buf
                }
        } else if IsPrint(r) || graphicOnly && isInGraphicList(r) {
-               n := utf8.EncodeRune(runeTmp[:], r)
-               buf = append(buf, runeTmp[:n]...)
-               return buf
+               return utf8.AppendRune(buf, r)
        }
        switch r {
        case '\a':
@@ -471,9 +468,7 @@ func unquote(in string, unescape bool) (out, rem string, err error) {
                                if r < utf8.RuneSelf || !multibyte {
                                        buf = append(buf, byte(r))
                                } else {
-                                       var arr [utf8.UTFMax]byte
-                                       n := utf8.EncodeRune(arr[:], r)
-                                       buf = append(buf, arr[:n]...)
+                                       buf = utf8.AppendRune(buf, r)
                                }
                        }