From 83db646ff4ab4968d16181edb72e7389491aa2ce Mon Sep 17 00:00:00 2001 From: coolreader18 <33094578+coolreader18@users.noreply.github.com> Date: Sun, 15 Sep 2019 00:13:05 -0500 Subject: [PATCH] Fix str.split's args --- vm/src/obj/objstr.rs | 36 ++++++++++++++---------------------- 1 file changed, 14 insertions(+), 22 deletions(-) diff --git a/vm/src/obj/objstr.rs b/vm/src/obj/objstr.rs index 82fafa8a3..c7a3fcbb0 100644 --- a/vm/src/obj/objstr.rs +++ b/vm/src/obj/objstr.rs @@ -346,18 +346,10 @@ impl PyString { } #[pymethod] - fn split( - &self, - pattern: OptionalArg, - num: OptionalArg, - vm: &VirtualMachine, - ) -> PyObjectRef { + fn split(&self, args: SplitArgs, vm: &VirtualMachine) -> PyObjectRef { let value = &self.value; - let pattern = match pattern { - OptionalArg::Present(ref s) => Some(s.as_str()), - OptionalArg::Missing => None, - }; - let num_splits = num.into_option().unwrap_or(-1); + let pattern = args.sep.as_ref().map(|s| s.as_str()); + let num_splits = args.maxsplit; let elements: Vec<_> = match (pattern, num_splits.is_negative()) { (Some(pattern), true) => value .split(pattern) @@ -382,18 +374,10 @@ impl PyString { } #[pymethod] - fn rsplit( - &self, - pattern: OptionalArg, - num: OptionalArg, - vm: &VirtualMachine, - ) -> PyObjectRef { + fn rsplit(&self, args: SplitArgs, vm: &VirtualMachine) -> PyObjectRef { let value = &self.value; - let pattern = match pattern { - OptionalArg::Present(ref s) => Some(s.as_str()), - OptionalArg::Missing => None, - }; - let num_splits = num.into_option().unwrap_or(-1); + let pattern = args.sep.as_ref().map(|s| s.as_str()); + let num_splits = args.maxsplit; let mut elements: Vec<_> = match (pattern, num_splits.is_negative()) { (Some(pattern), true) => value .rsplit(pattern) @@ -1182,6 +1166,14 @@ impl IntoPyObject for &String { } } +#[derive(FromArgs)] +struct SplitArgs { + #[pyarg(positional_or_keyword, default = "None")] + sep: Option, + #[pyarg(positional_or_keyword, default = "-1")] + maxsplit: isize, +} + pub fn init(ctx: &PyContext) { PyString::extend_class(ctx, &ctx.types.str_type);