On Mon, Jul 15, 2024 at 8:46 AM Douglas McIlroy <douglas.mcilroy@dartmouth.edu> wrote:

We never considered anything but recursive expansion, where macro definitions can contain macro calls; thus the TX-0 model comes as quite a surprise. We kept a modest stack of the state of each active macro expansion. We certainly did not foresee that within a few years some applications would need a 70-level stack! 

As I mentioned in a previous reply, BLISS has a very powerful and extensive macro facility.  This led to an obscure and difficult to fix parser bug.

The outermost organizational unit of a BLISS program is the module.  All declarations, routines, identifiers, etc. have a syntactic scope limited to the module in which they occur.  Modules are delimited by the keywords MODULE and ELUOM (module spelt backwards).

The bug was triggered by a call to a macro that included an ELUDOM followed by a new MODULE declaration.  When the parser saw the ELUDOM it threw away all of the context for the current module, including the parser context for the macro that was being processed.  The parser blew its brains out and the compilation terminated with an internal compiler error.

-Paul W.

P. S. - I once remarked that in BLISS we don't solve problems, we ELUDOM.