Skip to main content

call_modifier_generic

Function call_modifier_generic 

Source
pub unsafe fn call_modifier_generic(
    func: *const c_void,
    recv: *const c_void,
    ints: &[u64],
    floats: [f64; 4],
    result_size: usize,
) -> Vec<u8> โ“˜
Expand description

Call a View modifier whose integer arguments are given in full.

call_modifier appends Self.Type and the Self: View witness table itself, which is right for the great majority of modifiers and wrong for every generic one: id<H: Hashable> and contentShape<S: Shape> take two metadata arguments and two witness tables, and they interleave with the value arguments in a way no fixed tail can express. Here the caller supplies the whole integer sequence, type arguments and witness tables included.

All eight argument registers are always loaded. A callee reads only the ones its signature names, so padding the sequence with zeroes is free and saves dispatching on the argument count.

ยงSafety

func must be the modifier, and ints/floats must match its signature โ€” including the trailing metadata and witness tables, which are not implied.