diff options
Diffstat (limited to 'src/pkg/big/nat.go')
-rwxr-xr-x | src/pkg/big/nat.go | 24 |
1 files changed, 11 insertions, 13 deletions
diff --git a/src/pkg/big/nat.go b/src/pkg/big/nat.go index dc2e6be28..a308f69e8 100755 --- a/src/pkg/big/nat.go +++ b/src/pkg/big/nat.go @@ -103,9 +103,7 @@ func (z nat) setUint64(x uint64) nat { func (z nat) set(x nat) nat { z = z.make(len(x)) - for i, d := range x { - z[i] = d - } + copy(z, x) return z } @@ -666,7 +664,7 @@ func (z nat) scan(s string, base int) (nat, int, int) { } } - return z, base, i + return z.norm(), base, i } @@ -818,13 +816,13 @@ func (z nat) or(x, y nat) nat { n, m = m, n s = y } - // n >= m + // m >= n - z = z.make(n) - for i := 0; i < m; i++ { + z = z.make(m) + for i := 0; i < n; i++ { z[i] = x[i] | y[i] } - copy(z[m:n], s[m:n]) + copy(z[n:m], s[n:m]) return z.norm() } @@ -834,17 +832,17 @@ func (z nat) xor(x, y nat) nat { m := len(x) n := len(y) s := x - if n < m { + if m < n { n, m = m, n s = y } - // n >= m + // m >= n - z = z.make(n) - for i := 0; i < m; i++ { + z = z.make(m) + for i := 0; i < n; i++ { z[i] = x[i] ^ y[i] } - copy(z[m:n], s[m:n]) + copy(z[n:m], s[n:m]) return z.norm() } |