Hi C'edrick,

on Mon, 18 Feb 2008 01:10:41 +0100, you wrote:

David T. Lewis wrote:
If you comment out the primitive like this is should definitely work:


If I comment out the primitive, in Float>>= ... and put a self halt
after, the halt point has no effect.

This is correct, both your observation and the corresponding behavior of Squeak's VM. There are some message selectors whose method is only looked up if receiver/args don't match, for performance reason. To this belongs #= (bytecode #182) which is first tried for SmallInteger receiver/args, then if that fails tried for Float receiver/args, and if that also fails then routine #bytecodePrimEqual in Squeak's VM performs a normal send (which would then find the primitive number and/or the Smalltalk code if the primitive where absent or failed).

Looks complicated but works *fast* (only less failure is more speed :)

For what you want to do I'd suggest you duplicate method Float>>#= as Float>>#~=~ (just add the two ~ in Float's #= selector and alt-s) and then you can do

 1.234 ~=~ 1.234

and the changes you do to your #~=~ method then do what you want (it's Smalltalk land :)

HTH.

/Klaus

_______________________________________________
Beginners mailing list
Beginners@lists.squeakfoundation.org
http://lists.squeakfoundation.org/mailman/listinfo/beginners

Reply via email to