@@ -920,36 +920,71 @@ private static String capitalize(String self) {
920
920
}
921
921
}
922
922
923
+ // str.partition
924
+ @ Builtin (name = "partition" , minNumOfPositionalArgs = 2 )
925
+ @ GenerateNodeFactory
926
+ public abstract static class PartitionNode extends PythonBinaryBuiltinNode {
927
+
928
+ @ Specialization
929
+ Object doString (String self , String sep ) {
930
+ if (sep .isEmpty ()) {
931
+ throw raise (ValueError , ErrorMessages .EMPTY_SEPARATOR );
932
+ }
933
+ int indexOf = self .indexOf (sep );
934
+ String [] partitioned = new String [3 ];
935
+ if (indexOf == -1 ) {
936
+ partitioned [0 ] = self ;
937
+ partitioned [1 ] = "" ;
938
+ partitioned [2 ] = "" ;
939
+ } else {
940
+ partitioned [0 ] = PString .substring (self , 0 , indexOf );
941
+ partitioned [1 ] = sep ;
942
+ partitioned [2 ] = PString .substring (self , indexOf + sep .length ());
943
+ }
944
+ return factory ().createTuple (partitioned );
945
+ }
946
+
947
+ @ Specialization (replaces = "doString" )
948
+ Object doGeneric (Object self , Object sep ,
949
+ @ Cached CastToJavaStringCheckedNode castSelfNode ,
950
+ @ Cached CastToJavaStringCheckedNode castSepNode ) {
951
+ String selfStr = castSelfNode .cast (self , ErrorMessages .REQUIRES_STR_OBJECT_BUT_RECEIVED_P , "partition" , self );
952
+ String sepStr = castSepNode .cast (sep , ErrorMessages .MUST_BE_STR_NOT_P , sep );
953
+ return doString (selfStr , sepStr );
954
+ }
955
+ }
956
+
923
957
// str.rpartition
924
958
@ Builtin (name = "rpartition" , minNumOfPositionalArgs = 2 )
925
959
@ GenerateNodeFactory
926
960
public abstract static class RPartitionNode extends PythonBinaryBuiltinNode {
927
961
928
962
@ Specialization
929
- PList doString (String self , String sep ,
930
- @ Shared ("appendNode" ) @ Cached AppendNode appendNode ) {
963
+ Object doString (String self , String sep ) {
964
+ if (sep .isEmpty ()) {
965
+ throw raise (ValueError , ErrorMessages .EMPTY_SEPARATOR );
966
+ }
931
967
int lastIndexOf = self .lastIndexOf (sep );
932
- PList list = factory (). createList () ;
968
+ String [] partitioned = new String [ 3 ] ;
933
969
if (lastIndexOf == -1 ) {
934
- appendNode . execute ( list , "" ) ;
935
- appendNode . execute ( list , "" ) ;
936
- appendNode . execute ( list , self ) ;
970
+ partitioned [ 0 ] = "" ;
971
+ partitioned [ 1 ] = "" ;
972
+ partitioned [ 2 ] = self ;
937
973
} else {
938
- appendNode . execute ( list , PString .substring (self , 0 , lastIndexOf ) );
939
- appendNode . execute ( list , sep ) ;
940
- appendNode . execute ( list , PString .substring (self , lastIndexOf + sep .length () ));
974
+ partitioned [ 0 ] = PString .substring (self , 0 , lastIndexOf );
975
+ partitioned [ 1 ] = sep ;
976
+ partitioned [ 2 ] = PString .substring (self , lastIndexOf + sep .length ());
941
977
}
942
- return list ;
978
+ return factory (). createTuple ( partitioned ) ;
943
979
}
944
980
945
981
@ Specialization (replaces = "doString" )
946
- PList doGeneric (Object self , Object sep ,
982
+ Object doGeneric (Object self , Object sep ,
947
983
@ Cached CastToJavaStringCheckedNode castSelfNode ,
948
- @ Cached CastToJavaStringCheckedNode castSepNode ,
949
- @ Shared ("appendNode" ) @ Cached AppendNode appendNode ) {
984
+ @ Cached CastToJavaStringCheckedNode castSepNode ) {
950
985
String selfStr = castSelfNode .cast (self , ErrorMessages .REQUIRES_STR_OBJECT_BUT_RECEIVED_P , "rpartition" , self );
951
986
String sepStr = castSepNode .cast (sep , ErrorMessages .MUST_BE_STR_NOT_P , sep );
952
- return doString (selfStr , sepStr , appendNode );
987
+ return doString (selfStr , sepStr );
953
988
}
954
989
}
955
990
0 commit comments