Nicolas Cellier uploaded a new version of Kernel to project The Trunk:
http://source.squeak.org/trunk/Kernel-nice.748.mcz==================== Summary ====================
Name: Kernel-nice.748
Author: nice
Time: 11 March 2013, 8:18:42.912 am
UUID: e289a03d-ac61-40dd-9b28-4d950ddb1b76
Ancestors: Kernel-nice.747
Speed-up Integer+/-Fraction and Fraction+/-Integer because we know this does not require any gcd computation.
This speed up cause minimal code duplication.
=============== Diff against Kernel-nice.747 ===============
Item was changed:
----- Method: Fraction>>+ (in category 'arithmetic') -----
+ aNumber
"Answer the sum of the receiver and aNumber."
| n d d1 d2 |
+ aNumber isInteger ifTrue:
+ [^Fraction numerator: numerator + (denominator * aNumber) denominator: denominator].
aNumber isFraction ifTrue:
[d := denominator gcd: aNumber denominator.
n := numerator * (d1 := aNumber denominator // d) + (aNumber numerator * (d2 := denominator // d)).
d1 := d1 * d2.
n := n // (d2 := n gcd: d).
(d := d1 * (d // d2)) = 1 ifTrue: [^ n].
^ Fraction numerator: n denominator: d].
^ aNumber adaptToFraction: self andSend: #+!
Item was changed:
----- Method: Fraction>>- (in category 'arithmetic') -----
- aNumber
"Answer the difference between the receiver and aNumber."
+ aNumber isInteger ifTrue:
+ [^Fraction numerator: numerator - (denominator * aNumber) denominator: denominator].
aNumber isFraction ifTrue:
[^ self + aNumber negated].
^ aNumber adaptToFraction: self andSend: #-!
Item was changed:
----- Method: Integer>>+ (in category 'arithmetic') -----
+ aNumber
"Refer to the comment in Number + "
aNumber isInteger ifTrue:
[self negative == aNumber negative
ifTrue: [^ (self digitAdd: aNumber) normalize]
ifFalse: [^ self digitSubtract: aNumber]].
+ aNumber isFraction ifTrue:
+ [^Fraction numerator: self * aNumber denominator + aNumber numerator denominator: aNumber denominator].
^ aNumber adaptToInteger: self andSend: #+!
Item was changed:
----- Method: Integer>>- (in category 'arithmetic') -----
- aNumber
"Refer to the comment in Number - "
aNumber isInteger ifTrue:
[self negative == aNumber negative
ifTrue: [^ self digitSubtract: aNumber]
ifFalse: [^ (self digitAdd: aNumber) normalize]].
+ aNumber isFraction ifTrue:
+ [^Fraction numerator: self * aNumber denominator - aNumber numerator denominator: aNumber denominator].
^ aNumber adaptToInteger: self andSend: #-!