Peeling a stacked label whose name is a macro moves it onto a line of
its own, where its expansion decides the line's shape: an empty body
leaves a bare colon behind, a line the parser rejects. The peel loops
now hold such labels back with the rest of the line, and the crashing
input joins the corpus.
Assisted-by: GLM 5.3
The canonical form splits a label from the instruction that follows it,
but an identifier naming a macro may expand into any token at all: moved
to a line of its own it no longer parses, because the parser accepts a
non-mnemonic first token only behind a label. The names #define'd in
the file now hold such content back, conservatively across the whole
file, and the crashing input joins the corpus.
Assisted-by: GLM 5.3
A label whose name is a macro expands into whatever the body is, so the
line's statement structure exists only after expansion; splitting the
label off changed clean input into a different statement sequence. The
formatter now records the names #define'd above each line and renders
such a label line unsplit, and the crashing input joins the corpus.
Assisted-by: GLM 5.3
The canonical spelling of a #define line glued a '(' to the macro name
whatever the input's spacing, turning an object macro whose body opens
with a parenthesis into a parameterised one, and it flattened the
backslash continuations of a multi-line body into one physical line,
fusing the statements the expansion splits at those boundaries. Both
change what a valid file assembles to, so renderPreproc now keeps the
name's adjacency (the same column check the preprocessor applies) and
restores the continuation boundaries from the token positions.
Assisted-by: GLM 5.3