diff --git a/vm/src/stdlib/marshal.rs b/vm/src/stdlib/marshal.rs index 30bf88b24b..f7ae60eb1c 100644 --- a/vm/src/stdlib/marshal.rs +++ b/vm/src/stdlib/marshal.rs @@ -6,17 +6,27 @@ mod decl { builtins::{PyBytes, PyCode}, bytecode, function::ArgBytesLike, - PyObjectRef, PyRef, PyResult, TryFromObject, VirtualMachine, + PyObjectRef, PyResult, TryFromObject, VirtualMachine, }; #[pyfunction] - fn dumps(co: PyRef) -> PyBytes { - PyBytes::from(co.code.map_clone_bag(&bytecode::BasicBag).to_bytes()) + fn dumps(value: PyObjectRef, vm: &VirtualMachine) -> PyResult { + let r = match_class!(match value { + co @ PyCode => { + PyBytes::from(co.code.map_clone_bag(&bytecode::BasicBag).to_bytes()) + } + _ => + return Err(vm.new_not_implemented_error( + "TODO: not implemented yet or marshal unsupported type".to_owned() + )), + }); + Ok(r) } #[pyfunction] - fn dump(co: PyRef, f: PyObjectRef, vm: &VirtualMachine) -> PyResult<()> { - vm.call_method(&f, "write", (dumps(co),))?; + fn dump(value: PyObjectRef, f: PyObjectRef, vm: &VirtualMachine) -> PyResult<()> { + let dumped = dumps(value, vm)?; + vm.call_method(&f, "write", (dumped,))?; Ok(()) }