@@ -813,43 +813,35 @@ impl PyString {
813
813
}
814
814
815
815
#[ pymethod]
816
- fn partition ( & self , sub : PyStringRef , vm : & VirtualMachine ) -> PyResult {
817
- if sub. value . is_empty ( ) {
818
- return Err ( vm. new_value_error ( "empty separator" . to_owned ( ) ) ) ;
819
- }
820
- let mut sp = self . value . splitn ( 2 , & sub. value ) ;
821
- let front = sp. next ( ) . unwrap ( ) ;
822
- let elems = if let Some ( back) = sp. next ( ) {
823
- [ front, & sub. value , back]
824
- } else {
825
- [ front, "" , "" ]
826
- } ;
827
- Ok ( vm. ctx . new_tuple (
828
- elems
829
- . iter ( )
830
- . map ( |& s| vm. ctx . new_str ( s. to_owned ( ) ) )
831
- . collect ( ) ,
832
- ) )
816
+ fn partition ( & self , sep : PyStringRef , vm : & VirtualMachine ) -> PyResult {
817
+ let ( front, has_mid, back) =
818
+ self . value
819
+ . py_partition ( & sep. value , || self . value . splitn ( 2 , & sep. value ) , vm) ?;
820
+ Ok ( vm. ctx . new_tuple ( vec ! [
821
+ vm. ctx. new_str( front) ,
822
+ if has_mid {
823
+ sep. into_object( )
824
+ } else {
825
+ vm. ctx. new_str( "" )
826
+ } ,
827
+ vm. ctx. new_str( back) ,
828
+ ] ) )
833
829
}
834
830
835
831
#[ pymethod]
836
- fn rpartition ( & self , sub : PyStringRef , vm : & VirtualMachine ) -> PyResult {
837
- if sub. value . is_empty ( ) {
838
- return Err ( vm. new_value_error ( "empty separator" . to_owned ( ) ) ) ;
839
- }
840
- let mut sp = self . value . rsplitn ( 2 , & sub. value ) ;
841
- let back = sp. next ( ) . unwrap ( ) ;
842
- let elems = if let Some ( front) = sp. next ( ) {
843
- [ front, & sub. value , back]
844
- } else {
845
- [ "" , "" , back]
846
- } ;
847
- Ok ( vm. ctx . new_tuple (
848
- elems
849
- . iter ( )
850
- . map ( |& s| vm. ctx . new_str ( s. to_owned ( ) ) )
851
- . collect ( ) ,
852
- ) )
832
+ fn rpartition ( & self , sep : PyStringRef , vm : & VirtualMachine ) -> PyResult {
833
+ let ( back, has_mid, front) =
834
+ self . value
835
+ . py_partition ( & sep. value , || self . value . rsplitn ( 2 , & sep. value ) , vm) ?;
836
+ Ok ( vm. ctx . new_tuple ( vec ! [
837
+ vm. ctx. new_str( front) ,
838
+ if has_mid {
839
+ sep. into_object( )
840
+ } else {
841
+ vm. ctx. new_str( "" )
842
+ } ,
843
+ vm. ctx. new_str( back) ,
844
+ ] ) )
853
845
}
854
846
855
847
/// Return `true` if the sequence is ASCII titlecase and the sequence is not
0 commit comments