From 51df324765cebb175aa3914aae7fe5512bdb2947 Mon Sep 17 00:00:00 2001 From: Jeong YunWon Date: Thu, 7 Oct 2021 23:45:31 +0900 Subject: [PATCH] Make marshal.dumps ready ready for new contributors --- vm/src/stdlib/marshal.rs | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) 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(()) }