[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[bug #61100] [troff] do_request(): assertion failed: 'do_old_compatible_
From: |
G. Branden Robinson |
Subject: |
[bug #61100] [troff] do_request(): assertion failed: 'do_old_compatible_flag == -1' |
Date: |
Thu, 2 Sep 2021 10:56:43 -0400 (EDT) |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0 |
Follow-up Comment #4, bug #61100 (project groff):
[comment #2 comment #2:]
> [comment #1 comment #1:]
> > In ".do while ...", the "do" is valid for the whole loop.
>
> Is this documented? I don't find mention of it in the Texinfo manual.
Some language I just pushed, but had been working on since before I blundered
into this bug, may provide part of the explanation.
@code{de} defines a macro that inherits the compatibility mode
enablement status of its context (@pxref{Implementation Differences}).
Often it is desirable to make a macro that uses @code{groff} features
callable from contexts where compatibility mode is on; for instance,
when writing extensions to a historical macro package. To achieve this,
compatibility mode needs to be switched off while such a macro is
interpreted---without disturbing that state when it is finished.
Combine this with some older existing text...
The body of a @code{while} request is treated like the body of a
@code{de} request: GNU @code{troff} temporarily stores it in a macro
that is deleted after the loop exits. It can considerably slow down a
macro if the body of the @code{while} request (within the macro) is
large. Each time the macro is executed, the @code{while} body is parsed
and stored again as a temporary macro.
...and I think the consequence is implied.
I'll try a few different scenarios and see if just ditching the assertion is
warranted; it might well be.
_______________________________________________________
Reply to this item at:
<https://savannah.gnu.org/bugs/?61100>
_______________________________________________
Message sent via Savannah
https://savannah.gnu.org/