Expand description
The mutable-host counterpart of QCodeView: one trait carrying the
body-local mutation verbs, implemented by both mutation hosts.
Context resolves any function body in the module (the sequential/module
path); BodyMut resolves exactly one checked-out body (the function-pass
path, which panics on a foreign FunctionId). Every provided verb is a
one-liner into the canonical inherent implementation on FunctionBody, so
the verb logic exists in exactly one place and the hosts cannot drift.
The trait’s contract is strictly body-local mutation. Anything that
writes shared module state — name registration in the global table, varnode
or function minting — is deliberately absent and stays inherent on
Context, so “a checked-out pass cannot touch shared state” is documented
by the type system. The births (push_block, push_insn, push_mnemonic*,
…) and remove_cfg_edge also stay inherent per host: their spellings
diverge (the module path names the function, the checked-out path doesn’t),
and they are thin arena pushes with no drift-prone logic.