As everybody knows when we sent some inlined messages (like ifTrue:, or: , etc.) to non boolean objects the VM sends the message #mustBeBoolean instead of raising a DNU as usual.
Is there any reason not to send the message (ifTrue:, or:, etc) when the receiver is not a boolean instance (without losing the inlined performance for boolean instances)? I can’t think of any reason why this couldn’t be done.
If the message were sent, we could easily implement objects polymorphic with boolean instances, like booleans formula. Currently, the only way I know to achieve the same result is reimplementing mustBeBoolean and obtaining the block to be evaluated from the stack, but it's too complex.