LargeInteger.st
changeset 10728 ec5790d03608
parent 10726 5d75e2de262b
child 11501 4c31d5628937
--- a/LargeInteger.st	Tue Sep 25 16:10:35 2007 +0200
+++ b/LargeInteger.st	Tue Sep 25 17:53:36 2007 +0200
@@ -1686,18 +1686,23 @@
      Return the result of 'anInteger - self'. The argument must be a SmallInteger."
 
     anInteger > 0 ifTrue:[
-	sign > 0 ifTrue:[
-	    ^ self absFastMinus:anInteger sign:-1
-	].
-	^ self absFastPlus:anInteger sign:1
+        sign > 0 ifTrue:[
+            ^ self absFastMinus:anInteger sign:-1
+        ].
+        ^ self absFastPlus:anInteger sign:1
     ].
     anInteger == 0 ifTrue:[
-	^ self negated
+        ^ self negated
     ].
     sign > 0 ifTrue:[
-	^ self absFastPlus:anInteger negated sign:-1
+        ^ self absFastPlus:anInteger negated sign:-1
     ].
-    ^ self absFastMinus:anInteger sign:-1
+
+    self > anInteger ifTrue:[
+        ^ self absFastMinus:anInteger asLargeInteger sign:-1    
+    ] ifFalse:[
+        ^ anInteger asLargeInteger absFastMinus:self sign:-1    
+    ].
 
     "
      12345678901234567890
@@ -4576,5 +4581,5 @@
 !LargeInteger class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/LargeInteger.st,v 1.186 2007-09-25 13:58:09 sr Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/LargeInteger.st,v 1.187 2007-09-25 15:53:36 sr Exp $'
 ! !