5.6.2.39 Message: to: stop by: step do: operation . . . Definition: <number> . . . The elements must all conform to either the receiver's or step's protocol, according to the Default Conversion Table.
Interesting; I hadn't looked in detail at this area of the spec, but I agree with your interpretation of it.
To do this, it looks like you will have to implement a new double-dispatch message in each of the primary Number subclasses, paralleling the binary arithmetic messages and using the existing adaptTo:andSend: messages, e.g.:
Integer>>adaptTo: aNumber
^ aNumber adaptToInteger: self andSend: #yourself:
Float>>adaptTo: aNumber
^ aNumber adaptToFloat: self andSend: #yourself:
where #yourself: is a new keyword message in Object, which, just like #yourself, does nothing but return "self" (and ignores its argument).
The "yourself:" stuff seems kind of superfluous, but allows you to piggyback on the existing coersion mechanisms without having to write a whole new set that just adapts without sending a binary message.
-- tim
squeak-dev@lists.squeakfoundation.org