LargeInteger.st
changeset 19260 bf94da6b67ee
parent 19256 91884b166d88
child 19262 cf39fe4ec276
--- a/LargeInteger.st	Fri Feb 26 21:53:13 2016 +0100
+++ b/LargeInteger.st	Sat Feb 27 00:25:00 2016 +0100
@@ -558,8 +558,8 @@
      0 // 40000000000000000
     "
 
-    "Modified: / 5.11.1996 / 16:39:36 / cg"
-    "Modified: / 27.4.1999 / 19:50:26 / stefan"
+    "Modified: / 27-04-1999 / 19:50:26 / stefan"
+    "Modified: / 26-02-2016 / 22:28:27 / cg"
 !
 
 \\ aNumber
@@ -5523,9 +5523,25 @@
 !
 
 setSign:aNumber
-    "destructively change the sign of the receiver"
-
-    sign := aNumber
+    "destructively change the sign of the receiver.
+     Return the compressed integer (smallinteger if possible)"
+
+    sign := aNumber.
+%{
+    if (aNumber == __MKSMALLINT(-1)) {
+        if (__byteArraySize(__INST(digitByteArray)) == sizeof(INT)) {
+            if ( ((INT *)(__byteArrayVal(__INST(digitByteArray))))[0] == -_MIN_INT) {
+                RETURN(__MKSMALLINT(_MIN_INT));
+            }
+        }
+    }
+%}.
+
+    "
+     (LargeInteger digitBytes:#[0 0 0 64]) setSign:-1
+    "
+
+    "Modified (comment): / 26-02-2016 / 22:40:27 / cg"
 !
 
 sign:aNumber