Description
Support printing Rust generators in a way that looks more like enums. Generators (as of #59897) are represented in Rust as variant layouts with some extra fields on the outer layout. These extra fields (which are upvars, captured from the environment of the generator closure) seem to cause printing to become less pretty.
Today printing a Rust generator from rust-gdb
looks like this:
$2 = generator_objects::main::generator {__0: 0x7fffffffd204, <<variant>>: {__state: 3, 0: generator_objects::main::generator::Unresumed, 1: generator_objects::main::generator::Returned, 2: generator_objects::main::generator::Panicked, 3: generator_objects::main::generator::Suspend0 {c: 6, d: 7}, 4: generator_objects::main::generator::Suspend1 {c: 6, d: 7}}}
Note that we print the fields of every single variant, even though the discriminant is marked in the DWARF output.
Here's the test which produced the above output. The above excerpt is from the second print in the test. __0
in the output is the upvar for a
from the environment (it should be called a
instead of __0
, but this is a problem in the compiler).
I also opened this bug on GDB; I'm not sure how much we upstream pretty printing support today.