Skip to main content

call_modifier

Function call_modifier 

Source
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.