From 0e9d7d430b1aa74a58054a6a69aa3fb37353168d Mon Sep 17 00:00:00 2001 From: Tobias Klauser Date: Sat, 9 Mar 2019 14:11:40 +0100 Subject: [PATCH] bytes: return early in Repeat if count is 0 MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit This matches the implementation of strings.Repeat and slightly increases performance: name old time/op new time/op delta Repeat-8 145ns ±12% 125ns ±29% -13.35% (p=0.009 n=10+10) Change-Id: Ic0a0e2ea9e36591286a49def320ddb67fe0b2c50 Reviewed-on: https://go-review.googlesource.com/c/go/+/166399 Run-TryBot: Tobias Klauser TryBot-Result: Gobot Gobot Reviewed-by: Brad Fitzpatrick --- src/bytes/bytes.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/bytes/bytes.go b/src/bytes/bytes.go index f65bf214cc..6fcebe6593 100644 --- a/src/bytes/bytes.go +++ b/src/bytes/bytes.go @@ -499,13 +499,16 @@ func Map(mapping func(r rune) rune, s []byte) []byte { // It panics if count is negative or if // the result of (len(b) * count) overflows. func Repeat(b []byte, count int) []byte { + if count == 0 { + return []byte{} + } // Since we cannot return an error on overflow, // we should panic if the repeat will generate // an overflow. // See Issue golang.org/issue/16237. if count < 0 { panic("bytes: negative Repeat count") - } else if count > 0 && len(b)*count/count != len(b) { + } else if len(b)*count/count != len(b) { panic("bytes: Repeat count causes overflow") } -- 2.48.1