From 1ee583ef617b0157d99adc96ea060cf147e205b4 Mon Sep 17 00:00:00 2001 From: Aviv Palivoda Date: Fri, 8 Feb 2019 18:06:22 +0200 Subject: [PATCH] Use set_compare_inner --- vm/src/obj/objset.rs | 51 ++++++-------------------------------------- 1 file changed, 7 insertions(+), 44 deletions(-) diff --git a/vm/src/obj/objset.rs b/vm/src/obj/objset.rs index 40f131ab7..216d90db4 100644 --- a/vm/src/obj/objset.rs +++ b/vm/src/obj/objset.rs @@ -127,55 +127,18 @@ pub fn set_contains(vm: &mut VirtualMachine, args: PyFuncArgs) -> PyResult { } fn set_ge(vm: &mut VirtualMachine, args: PyFuncArgs) -> PyResult { - arg_check!( - vm, - args, - required = [ - (zelf, Some(vm.ctx.set_type())), - (other, Some(vm.ctx.set_type())) - ] - ); - for element in get_elements(other).iter() { - match vm.call_method(zelf, "__contains__", vec![element.1.clone()]) { - Ok(value) => { - if !objbool::get_value(&value) { - return Ok(vm.new_bool(false)); - } - } - Err(_) => return Err(vm.new_type_error("".to_string())), - } - } - Ok(vm.new_bool(true)) + return set_compare_inner(vm, args, &|zelf: usize, other: usize| -> bool {zelf < other}) } fn set_eq(vm: &mut VirtualMachine, args: PyFuncArgs) -> PyResult { - arg_check!( - vm, - args, - required = [ - (zelf, Some(vm.ctx.set_type())), - (other, Some(vm.ctx.set_type())) - ] - ); - let zelf_elements = get_elements(zelf); - let other_elements = get_elements(other); - if zelf_elements.len() != other_elements.len() { - return Ok(vm.new_bool(false)); - } - for element in zelf_elements.iter() { - match vm.call_method(other, "__contains__", vec![element.1.clone()]) { - Ok(value) => { - if !objbool::get_value(&value) { - return Ok(vm.new_bool(false)); - } - } - Err(_) => return Err(vm.new_type_error("".to_string())), - } - } - Ok(vm.new_bool(true)) + return set_compare_inner(vm, args, &|zelf: usize, other: usize| -> bool {zelf != other}) } fn set_gt(vm: &mut VirtualMachine, args: PyFuncArgs) -> PyResult { + return set_compare_inner(vm, args, &|zelf: usize, other: usize| -> bool {zelf <= other}) +} + +fn set_compare_inner(vm: &mut VirtualMachine, args: PyFuncArgs, size_func: &Fn(usize, usize) -> bool) -> PyResult { arg_check!( vm, args, @@ -187,7 +150,7 @@ fn set_gt(vm: &mut VirtualMachine, args: PyFuncArgs) -> PyResult { let zelf_elements = get_elements(zelf); let other_elements = get_elements(other); - if zelf_elements.len() <= other_elements.len() { + if size_func(zelf_elements.len(), other_elements.len()) { return Ok(vm.new_bool(false)); } for element in other_elements.iter() {