]> Cypherpunks.ru repositories - gostls13.git/commitdiff
strconv: document parsing of leading +/-
authorDamien Neil <dneil@google.com>
Mon, 7 Jun 2021 23:30:03 +0000 (16:30 -0700)
committerDamien Neil <dneil@google.com>
Wed, 9 Jun 2021 18:16:27 +0000 (18:16 +0000)
Explicitly document the handling of a sign prefix, and the interaction
between the sign and base prefixes.

Fixes #46641.

Change-Id: I3cd6773e3f074fe671a944a05a79d2408137fcd4
Reviewed-on: https://go-review.googlesource.com/c/go/+/325875
Trust: Damien Neil <dneil@google.com>
Run-TryBot: Damien Neil <dneil@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Rob Pike <r@golang.org>
src/strconv/atoi.go
src/strconv/atoi_test.go

index c9ba0383b3f86ee13d294af315926e32cfd076fc..631b487d9762bb71368b619e66feb454e5379bc2 100644 (file)
@@ -57,6 +57,8 @@ const IntSize = intSize
 const maxUint64 = 1<<64 - 1
 
 // ParseUint is like ParseInt but for unsigned numbers.
+//
+// A sign prefix is not permitted.
 func ParseUint(s string, base int, bitSize int) (uint64, error) {
        const fnParseUint = "ParseUint"
 
@@ -159,10 +161,13 @@ func ParseUint(s string, base int, bitSize int) (uint64, error) {
 // ParseInt interprets a string s in the given base (0, 2 to 36) and
 // bit size (0 to 64) and returns the corresponding value i.
 //
+// The string may begin with a leading sign: "+" or "-".
+//
 // If the base argument is 0, the true base is implied by the string's
-// prefix: 2 for "0b", 8 for "0" or "0o", 16 for "0x", and 10 otherwise.
-// Also, for argument base 0 only, underscore characters are permitted
-// as defined by the Go syntax for integer literals.
+// prefix following the sign (if present): 2 for "0b", 8 for "0" or "0o",
+// 16 for "0x", and 10 otherwise. Also, for argument base 0 only,
+// underscore characters are permitted as defined by the Go syntax for
+// integer literals.
 //
 // The bitSize argument specifies the integer type
 // that the result must fit into. Bit sizes 0, 8, 16, 32, and 64
index 178fb01ea7edac7f3178de5c0a1c1b7523bded43..867fa66a14ca8bbe8e13fe4a364129ef1150c1db 100644 (file)
@@ -33,6 +33,9 @@ var parseUint64Tests = []parseUint64Test{
        {"_12345", 0, ErrSyntax},
        {"1__2345", 0, ErrSyntax},
        {"12345_", 0, ErrSyntax},
+       {"-0", 0, ErrSyntax},
+       {"-1", 0, ErrSyntax},
+       {"+1", 0, ErrSyntax},
 }
 
 type parseUint64BaseTest struct {
@@ -140,8 +143,10 @@ var parseInt64Tests = []parseInt64Test{
        {"", 0, ErrSyntax},
        {"0", 0, nil},
        {"-0", 0, nil},
+       {"+0", 0, nil},
        {"1", 1, nil},
        {"-1", -1, nil},
+       {"+1", 1, nil},
        {"12345", 12345, nil},
        {"-12345", -12345, nil},
        {"012345", 12345, nil},
@@ -236,6 +241,11 @@ var parseInt64BaseTests = []parseInt64BaseTest{
        {"0__12345", 0, 0, ErrSyntax},
        {"01234__5", 0, 0, ErrSyntax},
        {"012345_", 0, 0, ErrSyntax},
+
+       {"+0xf", 0, 0xf, nil},
+       {"-0xf", 0, -0xf, nil},
+       {"0x+f", 0, 0, ErrSyntax},
+       {"0x-f", 0, 0, ErrSyntax},
 }
 
 type parseUint32Test struct {