'From Squeak 2.2 of Sept 23, 1998 on 9 November 1998 at 1:43:31 pm'! "Change Set: CoercionTweaks Date: 9 November 1998 Author: Dan Ingalls Adds a couple of isFoo messages to Object and removes them from Number so that coercion tests work with collections. Also adds handlers for adaptToInteger/Fraction/Float in Object that resends these as adaptToNumber. This means you only need the one adaptToNumber method in, eg, Collection, Point, Complex or whatever."! !Object methodsFor: 'testing' stamp: 'di 11/9/1998 09:38'! isFloat "Overridden to return true in Float, natch" ^ false! ! !Object methodsFor: 'testing' stamp: 'len 1/13/98 21:18'! isFraction "Answer true if the receiver is a Fraction." ^ false! ! !Object methodsFor: 'converting' stamp: 'di 11/9/1998 12:15'! adaptToFloat: rcvr andSend: selector "If no method has been provided for adapting an object to a Float, then it may be adequate to simply adapt it to a number." ^ self adaptToNumber: rcvr andSend: selector! ! !Object methodsFor: 'converting' stamp: 'di 11/9/1998 12:14'! adaptToFraction: rcvr andSend: selector "If no method has been provided for adapting an object to a Fraction, then it may be adequate to simply adapt it to a number." ^ self adaptToNumber: rcvr andSend: selector! ! !Object methodsFor: 'converting' stamp: 'di 11/9/1998 12:15'! adaptToInteger: rcvr andSend: selector "If no method has been provided for adapting an object to a Integer, then it may be adequate to simply adapt it to a number." ^ self adaptToNumber: rcvr andSend: selector! ! !Collection methodsFor: 'converting' stamp: 'di 11/9/1998 12:16'! adaptToNumber: rcvr andSend: selector "If I am involved in arithmetic with a scalar, return a Collection of the results of each element combined with the scalar in that expression." ^ self collect: [:element | rcvr perform: selector with: element]! ! !Point methodsFor: 'converting' stamp: 'di 11/9/1998 12:44'! adaptToNumber: rcvr andSend: selector "If I am involved in arithmetic with an Integer, convert it to a Point." ^ rcvr@rcvr perform: selector with: self! ! !String methodsFor: 'converting' stamp: 'di 11/9/1998 12:17'! adaptToNumber: rcvr andSend: selector "If I am involved in arithmetic with a number, convert me to a number." ^ rcvr perform: selector with: self asNumber! ! Collection removeSelector: #adaptToFraction:andSend:! Collection removeSelector: #adaptToFloat:andSend:! Collection removeSelector: #adaptToInteger:andSend:! Number removeSelector: #isFraction! Number removeSelector: #isInteger! Number removeSelector: #isFloat! Point removeSelector: #adaptToFraction:andSend:! Point removeSelector: #adaptToInteger:andSend:! Point removeSelector: #adaptToFloat:andSend:! String removeSelector: #adaptToFraction:andSend:! String removeSelector: #adaptToInteger:andSend:! String removeSelector: #adaptToFloat:andSend:!