291ff159

By: Tom Sydney Kerckhove <syd@cs-syd.eu>

Build each assertion from its own keyword

The previous fix put a function in the parse result, which is worse than the
overwrite it replaced.  Each keyword now carries the assertion body itself, so
the scope is still written exactly once and nothing awaiting a scope is ever
constructed.

Only the virtual form labels which balance it computed.  The existing message
is the one people already read, and the real form still means what it always
meant, so there is nothing there to disambiguate.