MCPcopy Index your code
hub / github.com/RustPython/RustPython / vectorcall_wrapper

Function vectorcall_wrapper

crates/vm/src/builtins/descriptor.rs:445–472  ·  view source on GitHub ↗

Vectorcall for wrapper_descriptor: calls wrapped slot function

(
    zelf_obj: &PyObject,
    mut args: Vec<PyObjectRef>,
    nargs: usize,
    kwnames: Option<&[PyObjectRef]>,
    vm: &VirtualMachine,
)

Source from the content-addressed store, hash-verified

443
444/// Vectorcall for wrapper_descriptor: calls wrapped slot function
445fn vectorcall_wrapper(
446 zelf_obj: &PyObject,
447 mut args: Vec<PyObjectRef>,
448 nargs: usize,
449 kwnames: Option<&[PyObjectRef]>,
450 vm: &VirtualMachine,
451) -> PyResult {
452 let zelf: &Py<PyWrapper> = zelf_obj.downcast_ref().unwrap();
453 // First positional arg is self
454 if nargs == 0 {
455 return Err(vm.new_type_error(format!(
456 "descriptor '{}' of '{}' object needs an argument",
457 zelf.name.as_str(),
458 zelf.typ.name()
459 )));
460 }
461 let obj = args.remove(0);
462 if !obj.fast_isinstance(zelf.typ) {
463 return Err(vm.new_type_error(format!(
464 "descriptor '{}' requires a '{}' object but received a '{}'",
465 zelf.name.as_str(),
466 zelf.typ.name(),
467 obj.class().name()
468 )));
469 }
470 let rest = FuncArgs::from_vectorcall_owned(args, nargs - 1, kwnames);
471 zelf.wrapped.call(obj, rest, vm)
472}
473
474pub fn init(ctx: &'static Context) {
475 PyMemberDescriptor::extend_class(ctx, ctx.types.member_descriptor_type);

Callers

nothing calls this directly

Calls 6

downcast_refMethod · 0.80
fast_isinstanceMethod · 0.80
ErrClass · 0.50
unwrapMethod · 0.45
removeMethod · 0.45
callMethod · 0.45

Tested by

no test coverage detected