--- 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