--- a/SmallInteger.st Mon Jul 26 11:07:53 1999 +0200
+++ b/SmallInteger.st Mon Jul 26 11:11:55 1999 +0200
@@ -435,44 +435,44 @@
double dval;
if (__isSmallInteger(aNumber)) {
- val = __intVal(aNumber);
- if (val != 0) {
- me = __intVal(self);
- t = me / val;
+ val = __intVal(aNumber);
+ if (val != 0) {
+ me = __intVal(self);
+ t = me / val;
#ifdef GOOD_OPTIMIZER
- if (me % val == 0) {
+ if (me % val == 0) {
#else
- /* this is stupid - all I want is to look for a remainder ...
- but most compilers are too stupid and generate an extra modulus
- instruction for "if (me % val)".
- Even if most divide instructions already leave the remainder in
- some register.
- Therefore I use a multiplication which is faster than a modulo
- on most machines. Hint to GNU people :-)
- */
- if ((t * val) == me) {
+ /* this is stupid - all I want is to look for a remainder ...
+ but most compilers are too stupid and generate an extra modulus
+ instruction for "if (me % val)".
+ Even if most divide instructions already leave the remainder in
+ some register.
+ Therefore I use a multiplication which is faster than a modulo
+ on most machines. Hint to GNU people :-)
+ */
+ if ((t * val) == me) {
#endif
- RETURN ( __MKSMALLINT(t) );
- }
- }
+ RETURN ( __MKSMALLINT(t) );
+ }
+ }
} else {
- if (__isFloatLike(aNumber)) {
- dval = __floatVal(aNumber);
- if (dval != 0.0) {
- OBJ newFloat;
- double val = (double)__intVal(self) / dval;
-
- __qMKFLOAT(newFloat, val);
- RETURN ( newFloat );
- }
- }
+ if (__isFloatLike(aNumber)) {
+ dval = __floatVal(aNumber);
+ if (dval != 0.0) {
+ OBJ newFloat;
+ double val = (double)__intVal(self) / dval;
+
+ __qMKFLOAT(newFloat, val);
+ RETURN ( newFloat );
+ }
+ }
}
%}.
aNumber isInteger ifTrue:[
- aNumber == 0 ifTrue:[
- ^ DivisionByZeroSignal raise.
- ].
- ^ Fraction numerator:self denominator:aNumber
+ aNumber == 0 ifTrue:[
+ ^ DivisionByZeroSignal raiseRequest.
+ ].
+ ^ Fraction numerator:self denominator:aNumber
].
^ aNumber quotientFromInteger:self
@@ -501,59 +501,59 @@
INT dividend, divisor, rslt;
if (__isSmallInteger(aNumber)) {
- divisor = __intVal(aNumber);
- if (divisor != 0) {
- dividend = __intVal(self);
- rslt = dividend / divisor;
- /*
- * Optimized to speed up positive result
- */
- if (rslt <= 0) {
- if (rslt == 0) {
- if (dividend * divisor < 0) {
- /*
- * result (negative) has been truncated toward 0.
- * Return -1, because we truncate toward negative inf.
- */
- rslt = -1;
- }
- } else {
- /*
- * If result (negative) has been truncated toward 0,
- * subtract 1, beacuse we truncate toward negative inf.
- */
- if (divisor > 0) {
- if (rslt * divisor > dividend) {
- rslt--;
- }
- } else {
- if (rslt * divisor < dividend) {
- rslt--;
- }
- }
- }
- }
- RETURN ( __MKSMALLINT(rslt) );
- }
+ divisor = __intVal(aNumber);
+ if (divisor != 0) {
+ dividend = __intVal(self);
+ rslt = dividend / divisor;
+ /*
+ * Optimized to speed up positive result
+ */
+ if (rslt <= 0) {
+ if (rslt == 0) {
+ if (dividend * divisor < 0) {
+ /*
+ * result (negative) has been truncated toward 0.
+ * Return -1, because we truncate toward negative inf.
+ */
+ rslt = -1;
+ }
+ } else {
+ /*
+ * If result (negative) has been truncated toward 0,
+ * subtract 1, beacuse we truncate toward negative inf.
+ */
+ if (divisor > 0) {
+ if (rslt * divisor > dividend) {
+ rslt--;
+ }
+ } else {
+ if (rslt * divisor < dividend) {
+ rslt--;
+ }
+ }
+ }
+ }
+ RETURN ( __MKSMALLINT(rslt) );
+ }
} else {
- if (__isFraction(aNumber)) {
- OBJ t;
- INT num, den;
-
- t = __FractionInstPtr(aNumber)->f_numerator;
- if (__isSmallInteger(t)) {
- num = __intVal(t);
- t = __FractionInstPtr(aNumber)->f_denominator;
- if (__isSmallInteger(t)) {
- den = __intVal(t);
- RETURN ( __MKSMALLINT(__intVal(self) * den / num ));
- }
- }
- }
+ if (__isFraction(aNumber)) {
+ OBJ t;
+ INT num, den;
+
+ t = __FractionInstPtr(aNumber)->f_numerator;
+ if (__isSmallInteger(t)) {
+ num = __intVal(t);
+ t = __FractionInstPtr(aNumber)->f_denominator;
+ if (__isSmallInteger(t)) {
+ den = __intVal(t);
+ RETURN ( __MKSMALLINT(__intVal(self) * den / num ));
+ }
+ }
+ }
}
%}.
(aNumber = 0) ifTrue:[
- ^ DivisionByZeroSignal raise.
+ ^ DivisionByZeroSignal raiseRequest.
].
^ self retry:#// coercing:aNumber
@@ -587,32 +587,32 @@
INT dividend, divisor, rem;
if (__isSmallInteger(aNumber)
- && (divisor = __intVal(aNumber)) != 0) {
- /*
- * Note that the sign of something modulo a negative number is undefined
- * in C!
- */
- dividend = __intVal(self);
- rem = dividend % divisor;
- if (rem) {
- if ((rem < 0) != (divisor < 0)) {
- /* sign of remainder is different from sign of divisor */
- rem = -rem;
- }
- if ((dividend < 0) != (divisor < 0)) {
- /* different signs, so division would have returned a
- * negative number.
- * C rounds toward zero, this code will simulate
- * rounding towards negative infinity.
- */
- rem = divisor - rem;
- }
- }
- RETURN ( __MKSMALLINT(rem) );
+ && (divisor = __intVal(aNumber)) != 0) {
+ /*
+ * Note that the sign of something modulo a negative number is undefined
+ * in C!
+ */
+ dividend = __intVal(self);
+ rem = dividend % divisor;
+ if (rem) {
+ if ((rem < 0) != (divisor < 0)) {
+ /* sign of remainder is different from sign of divisor */
+ rem = -rem;
+ }
+ if ((dividend < 0) != (divisor < 0)) {
+ /* different signs, so division would have returned a
+ * negative number.
+ * C rounds toward zero, this code will simulate
+ * rounding towards negative infinity.
+ */
+ rem = divisor - rem;
+ }
+ }
+ RETURN ( __MKSMALLINT(rem) );
}
%}.
(aNumber = 0) ifTrue:[
- ^ DivisionByZeroSignal raise.
+ ^ DivisionByZeroSignal raiseRequest.
].
^ self retry:#\\ coercing:aNumber
@@ -678,29 +678,29 @@
INT val;
if (__isSmallInteger(aNumber)) {
- val = __intVal(aNumber);
- if (val != 0) {
- RETURN ( __MKSMALLINT(__intVal(self) / val) );
- }
+ val = __intVal(aNumber);
+ if (val != 0) {
+ RETURN ( __MKSMALLINT(__intVal(self) / val) );
+ }
} else {
- if (__isFraction(aNumber)) {
- OBJ t;
- INT num, den;
-
- t = __FractionInstPtr(aNumber)->f_numerator;
- if (__isSmallInteger(t)) {
- num = __intVal(t);
- t = __FractionInstPtr(aNumber)->f_denominator;
- if (__isSmallInteger(t)) {
- den = __intVal(t);
- RETURN ( __MKSMALLINT(__intVal(self) * den / num ));
- }
- }
- }
+ if (__isFraction(aNumber)) {
+ OBJ t;
+ INT num, den;
+
+ t = __FractionInstPtr(aNumber)->f_numerator;
+ if (__isSmallInteger(t)) {
+ num = __intVal(t);
+ t = __FractionInstPtr(aNumber)->f_denominator;
+ if (__isSmallInteger(t)) {
+ den = __intVal(t);
+ RETURN ( __MKSMALLINT(__intVal(self) * den / num ));
+ }
+ }
+ }
}
%}.
(aNumber = 0) ifTrue:[
- ^ DivisionByZeroSignal raise.
+ ^ DivisionByZeroSignal raiseRequest.
].
^ self retry:#quo: coercing:aNumber
@@ -2897,5 +2897,5 @@
!SmallInteger class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libbasic/SmallInteger.st,v 1.114 1999-05-12 10:19:01 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic/SmallInteger.st,v 1.115 1999-07-26 09:11:55 stefan Exp $'
! !