pub unsafe fn call_modifier(
func: *const c_void,
recv: *const c_void,
recv_meta: *const c_void,
recv_wt: *const c_void,
ints: &[u64],
floats: [f64; 4],
result_size: usize,
) -> Vec<u8> ⓘExpand description
Apply a View modifier that takes only plain arguments.
The register layout follows one rule: floating-point arguments fill d0
upward, integer and pointer arguments fill x0 upward, and Self.Type then
the Self: View witness table follow immediately after the last integer
argument. So the only thing that shifts the layout is how many integer
arguments the modifier takes — unused float registers are simply ignored.
Which is why this is call_modifier_generic with a fixed two-word tail:
an ordinary modifier’s trailing metadata and witness table are exactly what
a generic one spells out for itself. A LocalizedStringKey is four words
and a Binding is three, so seven and eight arguments push that tail onto
the stack; the generic call handles the spill.
Modifiers with extra generic parameters take further type and witness-table
arguments and call call_modifier_generic directly.
§Safety
func must be the modifier, and ints/floats must match its signature.