diff -r 4e6346eb48a9 -r ec5790d03608 LargeInteger.st --- 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 $' ! !