From 8054d2da5bdbaf154b258d8d2fd24025a809b0de Mon Sep 17 00:00:00 2001 From: "zhi.wang" Date: Sun, 6 Apr 2025 13:08:57 +0000 Subject: [PATCH] strconv: use switch for '+'/'-' prefix handling Follow the approach used in strconv's readFloat, decimal.set, and Atoi, where leading '+' and '-' are handled using a switch for clarity and consistency. Change-Id: I41eff34ce90b5ac43fcdbc0bb88910d6d5fb4d39 GitHub-Last-Rev: 0c9d2efb5a828515fa00afdba8c436aa31fb0e53 GitHub-Pull-Request: golang/go#73185 Reviewed-on: https://go-review.googlesource.com/c/go/+/663257 Reviewed-by: Dmitri Shuralyov Auto-Submit: Dmitri Shuralyov Reviewed-by: Keith Randall Reviewed-by: Keith Randall LUCI-TryBot-Result: Go LUCI --- src/strconv/atof.go | 26 ++++++++++++++------------ src/strconv/atoi.go | 7 ++++--- 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/src/strconv/atof.go b/src/strconv/atof.go index fe0dfdce55..fbbd84deb3 100644 --- a/src/strconv/atof.go +++ b/src/strconv/atof.go @@ -77,12 +77,12 @@ func (b *decimal) set(s string) (ok bool) { if i >= len(s) { return } - switch { - case s[i] == '+': + switch s[i] { + case '+': + i++ + case '-': i++ - case s[i] == '-': b.neg = true - i++ } // digits @@ -135,9 +135,10 @@ func (b *decimal) set(s string) (ok bool) { return } esign := 1 - if s[i] == '+' { + switch s[i] { + case '+': i++ - } else if s[i] == '-' { + case '-': i++ esign = -1 } @@ -176,12 +177,12 @@ func readFloat(s string) (mantissa uint64, exp int, neg, trunc, hex bool, i int, if i >= len(s) { return } - switch { - case s[i] == '+': + switch s[i] { + case '+': + i++ + case '-': i++ - case s[i] == '-': neg = true - i++ } // digits @@ -268,9 +269,10 @@ loop: return } esign := 1 - if s[i] == '+' { + switch s[i] { + case '+': i++ - } else if s[i] == '-' { + case '-': i++ esign = -1 } diff --git a/src/strconv/atoi.go b/src/strconv/atoi.go index 599ad9b895..83e931fe24 100644 --- a/src/strconv/atoi.go +++ b/src/strconv/atoi.go @@ -204,11 +204,12 @@ func ParseInt(s string, base int, bitSize int) (i int64, err error) { // Pick off leading sign. s0 := s neg := false - if s[0] == '+' { + switch s[0] { + case '+': + s = s[1:] + case '-': s = s[1:] - } else if s[0] == '-' { neg = true - s = s[1:] } // Convert unsigned and check range.