@@ -600,21 +600,23 @@ protected int findWithBounds(String self, String str, int start, int end) {
600
600
public abstract static class RFindNode extends FindBaseNode {
601
601
602
602
@ Override
603
- @ TruffleBoundary
603
+ @ TruffleBoundary ( transferToInterpreterOnException = false )
604
604
protected int find (String self , String findStr ) {
605
605
return self .lastIndexOf (findStr );
606
606
}
607
607
608
608
@ Override
609
- @ TruffleBoundary
609
+ @ TruffleBoundary ( transferToInterpreterOnException = false )
610
610
protected int findWithBounds (String self , String str , int start , int end ) {
611
611
if (start != -1 && end != -1 ) {
612
- return self .substring (start , end ).lastIndexOf (str );
612
+ int idx = self .lastIndexOf (str , end - str .length () - 1 );
613
+ return idx >= start ? idx : -1 ;
613
614
} else if (start != -1 ) {
614
- return self .substring (start ).lastIndexOf (str );
615
+ int idx = self .lastIndexOf (str );
616
+ return idx >= start ? idx : -1 ;
615
617
} else {
616
618
assert end != -1 ;
617
- return self .substring ( 0 , end ). lastIndexOf ( str );
619
+ return self .lastIndexOf ( str , end - str . length () - 1 );
618
620
}
619
621
}
620
622
}
@@ -625,21 +627,23 @@ protected int findWithBounds(String self, String str, int start, int end) {
625
627
public abstract static class FindNode extends FindBaseNode {
626
628
627
629
@ Override
628
- @ TruffleBoundary
630
+ @ TruffleBoundary ( transferToInterpreterOnException = false )
629
631
protected int find (String self , String findStr ) {
630
632
return self .indexOf (findStr );
631
633
}
632
634
633
635
@ Override
634
- @ TruffleBoundary
636
+ @ TruffleBoundary ( transferToInterpreterOnException = false )
635
637
protected int findWithBounds (String self , String str , int start , int end ) {
636
638
if (start != -1 && end != -1 ) {
637
- return self .substring (0 , end ).indexOf (str , start );
639
+ int idx = self .indexOf (str , start );
640
+ return idx + str .length () <= end ? idx : -1 ;
638
641
} else if (start != -1 ) {
639
642
return self .indexOf (str , start );
640
643
} else {
641
644
assert end != -1 ;
642
- return self .substring (0 , end ).indexOf (str );
645
+ int idx = self .indexOf (str );
646
+ return idx + str .length () <= end ? idx : -1 ;
643
647
}
644
648
}
645
649
}
0 commit comments