A statement's bindings CANNOT be derived by walking its content: only the printer knows which values end up
as a `?` (an identifier renders as `` `name` ``, a raw fragment renders verbatim, and a `$in` array expands
to one `?` per item). So the printer itself records them here, in emission order, while it renders.
This is an object on purpose: it travels inside the printer's `$options` array, which is passed by value all
the way down, so only a shared handle survives the trip (same trick as `$options['hashes']`).