From 4bf56447125acd0f522ee2e9ad14f614fa3520e7 Mon Sep 17 00:00:00 2001 From: ChJR Date: Sat, 16 Jul 2022 17:09:27 +0900 Subject: [PATCH] Improve code quality --- vm/src/builtins/classmethod.rs | 20 +++++++++++--------- vm/src/builtins/staticmethod.rs | 19 +++++++++---------- 2 files changed, 20 insertions(+), 19 deletions(-) diff --git a/vm/src/builtins/classmethod.rs b/vm/src/builtins/classmethod.rs index c4d99fe6a..d321947d2 100644 --- a/vm/src/builtins/classmethod.rs +++ b/vm/src/builtins/classmethod.rs @@ -67,18 +67,20 @@ impl Constructor for PyClassMethod { type Args = PyObjectRef; fn py_new(cls: PyTypeRef, callable: Self::Args, vm: &VirtualMachine) -> PyResult { - let result: PyResult = PyClassMethod { - callable: PyMutex::new(callable.clone()), + let doc = callable.get_attr("__doc__", vm); + + let result = PyClassMethod { + callable: PyMutex::new(callable), } - .into_ref_with_type(vm, cls) - .map(Into::into); + .into_ref_with_type(vm, cls)?; + let obj = PyObjectRef::from(result); - let doc: PyResult = callable.get_attr("__doc__", vm); - let doc = vm.unwrap_pyresult(doc); - let obj = vm.unwrap_pyresult(result.clone()); + match doc { + Err(_) => None, + Ok(doc) => Some(obj.set_attr("__doc__", doc, vm)), + }; - obj.set_attr("__doc__", doc, vm)?; - result + Ok(obj) } } diff --git a/vm/src/builtins/staticmethod.rs b/vm/src/builtins/staticmethod.rs index 10244884a..502b2abf7 100644 --- a/vm/src/builtins/staticmethod.rs +++ b/vm/src/builtins/staticmethod.rs @@ -41,18 +41,17 @@ impl Constructor for PyStaticMethod { type Args = PyObjectRef; fn py_new(cls: PyTypeRef, callable: Self::Args, vm: &VirtualMachine) -> PyResult { - let result: PyResult = PyStaticMethod { - callable: callable.clone(), - } - .into_ref_with_type(vm, cls) - .map(Into::into); + let doc = callable.get_attr("__doc__", vm); - let doc: PyResult = callable.get_attr("__doc__", vm); - let doc = vm.unwrap_pyresult(doc); - let obj = vm.unwrap_pyresult(result.clone()); + let result = PyStaticMethod { callable }.into_ref_with_type(vm, cls)?; + let obj = PyObjectRef::from(result); - obj.set_attr("__doc__", doc, vm)?; - result + match doc { + Err(_) => None, + Ok(doc) => Some(obj.set_attr("__doc__", doc, vm)), + }; + + Ok(obj) } }