It wasn’t an infinte loop. When writing a ‘meta-circular compiler,’ so to speak,
you have to be careful where the language of the compiler begins and your
implementation ends. In particular, there are some macros that (under Chez Scheme)
implement the semantics of the predicate ‘begin?’ for the last few passes of the compiler.
These same macros do not work in MzScheme, because they do not
get expanded in the same way. As a result, the meaning of ‘boolean?’ gets clobbered,
and Very Bad ThingsTM happen.
All of this is to say, SUCCESS! I have a Scheme->C compiler running
under MzScheme, and tomorrow will (hopefully) start and finish the Forth pass.
If all goes well, I’ll have a complete Scheme->Forth compiler running by the end of the day.
Now, we know that such unbridled optimism is bound to run into a brick wall somewhere,
but we can hope.