What a runtime error report is built from: the source span of each
instruction and the text of every source file. It borrows both from the
program that runs, so starting a run costs no copy of either.
Every kind a runtime error the language raises itself can carry: what
ErrType::kind answers for each variant but Custom, whose kind is the
one a throw names. Keep the two in step.
The name a call site wrote for the function it calls: its source text up to
the arguments. The VM holds no table of function names, so an error about a
call reads the name back out of the source the call was compiled from.
Whether errors should be recorded as a Diagnostic instead of being
printed and aborting the process. This is what keeps the CLI behavior
byte-for-byte identical: without an active sink, every error path behaves
exactly as before.