++ mystery solved!!!!
alangrimes at starpower.net
Thu Apr 8 01:19:44 UTC 2004
You may recall that I noticed that the compiler was emitting "i += 1"
instead of "i++" in
for loops and elsewhere.
When I turned my attention from the interpreter (which I consider mostly
complete at this time, anyone wanting to test/synch up with my changes,
now would be a good time), I started looking for anomolies in the C code
and then at the compiler to see what caused them.
The compiler _WAS_ coded to emit "#to:do:" as ++ _HOWEVER_, the
*smalltalk* compiler sees #to:do: as a *macro* which is automatically
translated to #to:by:do: with an increment of 1.
Having discovered this, I edited the C compiler code for #to:by:do: to
detect a value of +/-1 and emit ++ or -- accordingly.
My binary is now about 16 bytes shorter so it did do some good! =))))
The GC problem I mentioned earlier seems to have been caused by my
attempt to do bitwise manipulations on word-variables. The mechanism
behind this is far from clear.
More information about the Squeak-dev