From ea25947b533b4d771d8a08991c645ffaf8f1e8de Mon Sep 17 00:00:00 2001 From: Jeong YunWon Date: Tue, 4 Aug 2020 23:07:53 +0900 Subject: [PATCH] Remove impl IntoPyObject for &PyObjectRef and &PyRef they doesn't give any benefit but just hide clone --- vm/src/format.rs | 5 ++--- vm/src/frame.rs | 6 +++--- vm/src/obj/objdict.rs | 2 +- vm/src/obj/objmappingproxy.rs | 2 +- vm/src/obj/objmemory.rs | 2 +- vm/src/obj/objstr.rs | 2 +- vm/src/pyobject.rs | 12 ------------ 7 files changed, 9 insertions(+), 22 deletions(-) diff --git a/vm/src/format.rs b/vm/src/format.rs index 0f88af928..c70a7873a 100644 --- a/vm/src/format.rs +++ b/vm/src/format.rs @@ -1,7 +1,7 @@ use crate::exceptions::PyBaseExceptionRef; use crate::function::PyFuncArgs; use crate::obj::{objstr, objtype}; -use crate::pyobject::{IntoPyObject, ItemProtocol, PyObjectRef, PyResult, TypeProtocol}; +use crate::pyobject::{ItemProtocol, PyObjectRef, PyResult, TypeProtocol}; use crate::vm::VirtualMachine; use itertools::{Itertools, PeekingNext}; use num_bigint::{BigInt, Sign}; @@ -823,8 +823,7 @@ impl FormatString { argument = vm.get_attribute(argument, attribute.as_str())?; } FieldNamePart::Index(index) => { - // TODO Implement DictKey for usize so we can pass index directly - argument = argument.get_item(&index.into_pyobject(vm), vm)?; + argument = argument.get_item(index, vm)?; } FieldNamePart::StringIndex(index) => { argument = argument.get_item(&index, vm)?; diff --git a/vm/src/frame.rs b/vm/src/frame.rs index 337f23241..38606b3fb 100644 --- a/vm/src/frame.rs +++ b/vm/src/frame.rs @@ -947,7 +947,7 @@ impl ExecutingFrame<'_> { fn execute_subscript(&mut self, vm: &VirtualMachine) -> FrameResult { let b_ref = self.pop_value(); let a_ref = self.pop_value(); - let value = a_ref.get_item(&b_ref, vm)?; + let value = a_ref.get_item(b_ref, vm)?; self.push_value(value); Ok(None) } @@ -963,7 +963,7 @@ impl ExecutingFrame<'_> { fn execute_delete_subscript(&mut self, vm: &VirtualMachine) -> FrameResult { let idx = self.pop_value(); let obj = self.pop_value(); - obj.del_item(&idx, vm)?; + obj.del_item(idx, vm)?; Ok(None) } @@ -987,7 +987,7 @@ impl ExecutingFrame<'_> { })?; for (key, value) in dict { if for_call { - if map_obj.contains_key(&key, vm) { + if map_obj.contains_key(key.clone(), vm) { let key_repr = vm.to_repr(&key)?; let msg = format!( "got multiple values for keyword argument {}", diff --git a/vm/src/obj/objdict.rs b/vm/src/obj/objdict.rs index a31e66a31..90b522485 100644 --- a/vm/src/obj/objdict.rs +++ b/vm/src/obj/objdict.rs @@ -75,7 +75,7 @@ impl PyDictRef { } else if let Some(keys) = vm.get_method(dict_obj.clone(), "keys") { let keys = objiter::get_iter(vm, &vm.invoke(&keys?, vec![])?)?; while let Some(key) = objiter::get_next_object(vm, &keys)? { - let val = dict_obj.get_item(&key, vm)?; + let val = dict_obj.get_item(key.clone(), vm)?; dict.insert(vm, key, val)?; } } else { diff --git a/vm/src/obj/objmappingproxy.rs b/vm/src/obj/objmappingproxy.rs index 2f31b1a18..67256eca0 100644 --- a/vm/src/obj/objmappingproxy.rs +++ b/vm/src/obj/objmappingproxy.rs @@ -50,7 +50,7 @@ impl PyMappingProxy { let key = PyStringRef::try_from_object(vm, key)?; class.get_attr(key.as_str()) } - MappingProxyInner::Dict(obj) => obj.get_item(&key, vm).ok(), + MappingProxyInner::Dict(obj) => obj.get_item(key, vm).ok(), }; Ok(opt) } diff --git a/vm/src/obj/objmemory.rs b/vm/src/obj/objmemory.rs index acdf09ad3..75b9aff13 100644 --- a/vm/src/obj/objmemory.rs +++ b/vm/src/obj/objmemory.rs @@ -60,7 +60,7 @@ impl PyMemoryView { #[pymethod(name = "__getitem__")] fn getitem(&self, needle: PyObjectRef, vm: &VirtualMachine) -> PyResult { - self.obj_ref.get_item(&needle, vm) + self.obj_ref.get_item(needle, vm) } #[pymethod(magic)] diff --git a/vm/src/obj/objstr.rs b/vm/src/obj/objstr.rs index 1ec987096..093e6e494 100644 --- a/vm/src/obj/objstr.rs +++ b/vm/src/obj/objstr.rs @@ -953,7 +953,7 @@ impl PyString { let mut translated = String::new(); for c in self.value.chars() { - match table.get_item(&(c as u32).into_pyobject(vm), vm) { + match table.get_item((c as u32).into_pyobject(vm), vm) { Ok(value) => { if let Some(text) = value.payload::() { translated.push_str(&text.value); diff --git a/vm/src/pyobject.rs b/vm/src/pyobject.rs index 6f295918c..4a4118aaa 100644 --- a/vm/src/pyobject.rs +++ b/vm/src/pyobject.rs @@ -1160,12 +1160,6 @@ impl IntoPyObject for PyRef { } } -impl IntoPyObject for &PyRef { - fn into_pyobject(self, _vm: &VirtualMachine) -> PyObjectRef { - self.obj.clone() - } -} - impl IntoPyObject for PyCallable { fn into_pyobject(self, _vm: &VirtualMachine) -> PyObjectRef { self.into_object() @@ -1178,12 +1172,6 @@ impl IntoPyObject for PyObjectRef { } } -impl IntoPyObject for &PyObjectRef { - fn into_pyobject(self, _vm: &VirtualMachine) -> PyObjectRef { - self.clone() - } -} - // Allows a built-in function to return any built-in object payload without // explicitly implementing `IntoPyObject`. impl IntoPyObject for T