From: Robert Griesemer Date: Fri, 21 May 2010 21:28:34 +0000 (-0700) Subject: big: fix Int.SetString comment, simplify implementation, X-Git-Tag: weekly.2010-05-27~51 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=e8dec0dc052d51a6e11f4e39e26536ebfe44b70b;p=gostls13.git big: fix Int.SetString comment, simplify implementation, always return z for nat.scan R=rsc CC=golang-dev https://golang.org/cl/1236043 --- diff --git a/src/pkg/big/int.go b/src/pkg/big/int.go index e1e45858a5..dd91796603 100755 --- a/src/pkg/big/int.go +++ b/src/pkg/big/int.go @@ -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 } diff --git a/src/pkg/big/nat.go b/src/pkg/big/nat.go index b098937307..aa021e8794 100755 --- a/src/pkg/big/nat.go +++ b/src/pkg/big/nat.go @@ -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