]> Cypherpunks repositories - gostls13.git/commitdiff
- a couple of fixes for integer.go
authorRobert Griesemer <gri@golang.org>
Thu, 26 Jun 2008 23:15:43 +0000 (16:15 -0700)
committerRobert Griesemer <gri@golang.org>
Thu, 26 Jun 2008 23:15:43 +0000 (16:15 -0700)
- added pkg dir

SVN=124991

test/bugs/bug058.go
test/integer.go

index 19a9aa136b7a02760d64d41379396ccb1e1a98c5..d60e05f42bf7782a98896a8bbbb4470ac29dcad9 100644 (file)
@@ -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;
 }
 
 /*
index f7e3c25368be199a8f6773ca2b7af5a00c42234c..963e52fd18c3250b3230cfe0a30d659a19394080 100755 (executable)
@@ -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";
+}