@@ -911,20 +911,28 @@ public static int rindex(ByteList source, int sourceChars, int subChars, int pos
911
911
}
912
912
913
913
int s = nth (enc , sourceBytes , sbeg , end , pos );
914
- byte [] subBytes = subString .unsafeBytes ();
915
914
916
- // switch to byte size here; this is now MRI:str_rindex
917
- if (subSize == 0 ) return pos ;
918
- int t = subString .begin ();
915
+ return strRindex (source , subString , s , pos , enc );
916
+ }
917
+
918
+ private static int strRindex (ByteList str , ByteList sub , int s , int pos , Encoding enc ) {
919
+ int slen ;
920
+ byte [] strBytes = str .unsafeBytes ();
921
+ byte [] subBytes = sub .unsafeBytes ();
922
+ int sbeg , e , t ;
923
+
924
+ sbeg = str .begin ();
925
+ e = str .begin () + str .realSize ();
926
+ t = sub .begin ();
927
+ slen = sub .realSize ();
919
928
920
- // s >= 0 because -1 is our OOB, where MRI's is null pointer (0)
921
- while (s >= 0 && s + subSize <= sourceSize ) {
922
- if (ByteList .memcmp (sourceBytes , s , subBytes , t , subSize ) == 0 ) {
929
+ while (s >= sbeg ) {
930
+ if (ByteList .memcmp (strBytes , s , subBytes , t , slen ) == 0 ) {
923
931
return pos ;
924
932
}
925
933
if (pos == 0 ) break ;
926
934
pos --;
927
- s = enc .prevCharHead (sourceBytes , sbeg , s , end );
935
+ s = enc .prevCharHead (strBytes , sbeg , s , e );
928
936
}
929
937
930
938
return -1 ;
0 commit comments