diff --git a/vm/src/builtins/builtinfunc.rs b/vm/src/builtins/builtinfunc.rs index 66437ee5f..3dea2fa87 100644 --- a/vm/src/builtins/builtinfunc.rs +++ b/vm/src/builtins/builtinfunc.rs @@ -254,6 +254,15 @@ impl PyBuiltinMethod { self.class.name() ) } + #[pymethod(magic)] + fn reduce( + &self, + vm: &VirtualMachine, + ) -> (Option, (Option, PyStrRef)) { + let builtinfunc_getattr = vm.builtins.get_attr("getattr", vm).ok(); + let classname = vm.builtins.get_attr(self.class.name().to_string(), vm).ok(); + (builtinfunc_getattr, (classname, self.value.name.clone())) + } } impl Unconstructible for PyBuiltinMethod {} diff --git a/vm/src/builtins/function.rs b/vm/src/builtins/function.rs index 460ceb762..1a3cc2bf0 100644 --- a/vm/src/builtins/function.rs +++ b/vm/src/builtins/function.rs @@ -552,6 +552,17 @@ impl PyBoundMethod { )) } + #[pymethod(magic)] + fn reduce( + &self, + vm: &VirtualMachine, + ) -> (Option, (PyObjectRef, Option)) { + let builtinfunc_getattr = vm.builtins.get_attr("getattr", vm).ok(); + let funcself = self.object.clone(); + let funcname = self.function.get_attr("__name__", vm).ok(); + (builtinfunc_getattr, (funcself, funcname)) + } + #[pygetset(magic)] fn doc(&self, vm: &VirtualMachine) -> PyResult { self.function.get_attr("__doc__", vm)