From 2e9892029a00a43f3d80cbb19b12a5d0ddcbf33f Mon Sep 17 00:00:00 2001 From: Nic Ficca Date: Sat, 9 Feb 2019 16:49:44 -0500 Subject: [PATCH] Add objrange::get_value - Refactor range_count to use get_value and isinstance for pulling out the range and argument respectively --- vm/src/obj/objrange.rs | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/vm/src/obj/objrange.rs b/vm/src/obj/objrange.rs index 2b6f79617..23c572589 100644 --- a/vm/src/obj/objrange.rs +++ b/vm/src/obj/objrange.rs @@ -127,6 +127,14 @@ impl RangeType { } } +pub fn get_value(obj: &PyObjectRef) -> RangeType { + if let PyObjectPayload::Range { range } = &obj.borrow().payload { + range.clone() + } else { + panic!("Inner error getting range {:?}", obj); + } +} + pub fn init(context: &PyContext) { let ref range_type = context.range_type; @@ -380,15 +388,14 @@ fn range_count(vm: &mut VirtualMachine, args: PyFuncArgs) -> PyResult { arg_check!( vm, args, - required = [(zelf, Some(vm.ctx.range_type())), (needle, None)] + required = [(zelf, Some(vm.ctx.range_type())), (item, None)] ); - if let PyObjectPayload::Range { ref range } = zelf.borrow().payload { - match needle.borrow().payload { - PyObjectPayload::Integer { ref value } => Ok(vm.ctx.new_int(range.count(value))), - _ => Ok(vm.ctx.new_int(0)), - } + let range = get_value(zelf); + + if objtype::isinstance(item, &vm.ctx.int_type()) { + Ok(vm.ctx.new_int(range.count(&objint::get_value(item)))) } else { - unreachable!() + Ok(vm.ctx.new_int(0)) } }