]> Cypherpunks repositories - gostls13.git/commitdiff
big: fix Int.SetString comment, simplify implementation,
authorRobert Griesemer <gri@golang.org>
Fri, 21 May 2010 21:28:34 +0000 (14:28 -0700)
committerRobert Griesemer <gri@golang.org>
Fri, 21 May 2010 21:28:34 +0000 (14:28 -0700)
     always return z for nat.scan

R=rsc
CC=golang-dev
https://golang.org/cl/1236043

src/pkg/big/int.go
src/pkg/big/nat.go

index e1e45858a53e5d62dc28dd902a7f707f235c065d..dd91796603cab8dfadf215e89df797f4692b8f76 100755 (executable)
@@ -333,18 +333,18 @@ func (x *Int) Int64() int64 {
 }
 
 
-// SetString sets z to the value of s, interpreted in the given base.
-// If base is 0 then SetString attempts to detect the base by at the prefix of
-// s. '0x' implies base 16, '0' implies base 8. Otherwise base 10 is assumed.
+// SetString sets z to the value of s, interpreted in the given base,
+// and returns z and a boolean indicating success. If SetString fails,
+// the value of z is undefined.
+//
+// If the base argument is 0, the string prefix determines the actual
+// conversion base. A prefix of ``0x'' or ``0X'' selects base 16; the
+// ``0'' prefix selects base 8, and a ``0b'' or ``0B'' prefix selects
+// base 2. Otherwise the selected base is 10.
+//
 func (z *Int) SetString(s string, base int) (*Int, bool) {
-       var scanned int
-
-       if base == 1 || base > 16 {
-               goto Error
-       }
-
-       if len(s) == 0 {
-               goto Error
+       if len(s) == 0 || base < 0 || base == 1 || 16 < base {
+               return z, false
        }
 
        neg := false
@@ -353,18 +353,14 @@ func (z *Int) SetString(s string, base int) (*Int, bool) {
                s = s[1:]
        }
 
+       var scanned int
        z.abs, _, scanned = z.abs.scan(s, base)
        if scanned != len(s) {
-               goto Error
+               return z, false
        }
        z.neg = len(z.abs) > 0 && neg // 0 has no sign
 
        return z, true
-
-Error:
-       z.abs = nil
-       z.neg = false
-       return z, false
 }
 
 
index b098937307b1495b6a00c7429fa657fc81af9229..aa021e8794453fb272f4fea6611ada8cba25f9c3 100755 (executable)
@@ -653,7 +653,7 @@ func (z nat) scan(s string, base int) (nat, int, int) {
 
        // reject illegal bases or strings consisting only of prefix
        if base < 2 || 16 < base || (base != 8 && i >= n) {
-               return nil, 0, 0
+               return z, 0, 0
        }
 
        // convert string