On Mon, Jul 15, 2024 at 8:46 AM Douglas McIlroy <
douglas.mcilroy(a)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.