Module transform_dyn_trait_calls

Source
Expand description

Transform method calls on &dyn Trait to vtable function pointer calls.

This pass converts direct method calls on trait objects into calls through vtable function pointers. For example:

let x: &dyn Trait = &obj;
x.method(args);

is transformed from:

@0 := call <dyn Trait as Trait>::method(x, args)

to:

@0 := (move (*@receiver.ptr_metadata).method_check)(move (@receiver), move (@args)) // Call through function pointer

Structs§

Transform