From: Robert Griesemer Date: Thu, 26 Jun 2008 23:15:43 +0000 (-0700) Subject: - a couple of fixes for integer.go X-Git-Tag: weekly.2009-11-06~3610 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=433ac8e57bb973252f6eab072d89e6699fa21328;p=gostls13.git - a couple of fixes for integer.go - added pkg dir SVN=124991 --- diff --git a/test/bugs/bug058.go b/test/bugs/bug058.go index 19a9aa136b..d60e05f42b 100644 --- a/test/bugs/bug058.go +++ b/test/bugs/bug058.go @@ -10,7 +10,9 @@ type Box struct {}; var m map[string] *Box; func main() { - m["foo"] = nil; + s := "foo"; + var x *Box = nil; + m[s] = x; } /* diff --git a/test/integer.go b/test/integer.go index f7e3c25368..963e52fd18 100755 --- a/test/integer.go +++ b/test/integer.go @@ -415,7 +415,7 @@ func copy(x Value) Value { z := alloc(xl + 1); // add space for one extra digit for i := 0; i < xl; i++ { z[i + H] = x[i + H]; } - set_len(z, xl); + set_len(z, int(x[0])); // don't loose sign! return z; } @@ -569,7 +569,14 @@ func (x Integer) xor (y Integer) Integer { // Comparisons func (x Integer) cmp (y Integer) int { - return 0; + // do better then this + d := x.sub(y); + switch { + case sign(d.val): return -1; + case zero(d.val): return 0; + default : return +1; + } + CHECK(false); // unreachable } @@ -616,3 +623,18 @@ func (x Integer) ToString() string { return tostring(x.val); } + +func (x Integer) ToInt() int { + v := x.val; + if len_(v) <= 1 { + if zero(v) { + return 0; + } + i := int(v[0 + H]); + if sign(v) { + i = -i; // incorrect for smallest int + } + return i; + } + panic "integer too large"; +}