|
@@ -45,6 +45,13 @@ class StringImpl {
|
|
public static inline function lastIndexOf(s:String, str:String, ?startIndex:Int):Int {
|
|
public static inline function lastIndexOf(s:String, str:String, ?startIndex:Int):Int {
|
|
if (startIndex == null) {
|
|
if (startIndex == null) {
|
|
return Syntax.callField(s, "rfind", str, 0, s.length);
|
|
return Syntax.callField(s, "rfind", str, 0, s.length);
|
|
|
|
+ } else if(str == "") {
|
|
|
|
+ var length = s.length;
|
|
|
|
+ if(startIndex < 0) {
|
|
|
|
+ startIndex = length + startIndex;
|
|
|
|
+ if(startIndex < 0) startIndex = 0;
|
|
|
|
+ }
|
|
|
|
+ return startIndex > length ? length : startIndex;
|
|
} else {
|
|
} else {
|
|
var i = Syntax.callField(s, "rfind", str, 0, startIndex + 1);
|
|
var i = Syntax.callField(s, "rfind", str, 0, startIndex + 1);
|
|
var startLeft = i == -1 ? UBuiltins.max(0, startIndex + 1 - str.length) : i + 1;
|
|
var startLeft = i == -1 ? UBuiltins.max(0, startIndex + 1 - str.length) : i + 1;
|
|
@@ -72,7 +79,19 @@ class StringImpl {
|
|
if (startIndex == null)
|
|
if (startIndex == null)
|
|
return Syntax.callField(s, "find", str);
|
|
return Syntax.callField(s, "find", str);
|
|
else
|
|
else
|
|
- return Syntax.callField(s, "find", str, startIndex);
|
|
|
|
|
|
+ return indexOfImpl(s, str, startIndex);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ static function indexOfImpl(s:String, str:String, startIndex:Int) {
|
|
|
|
+ if(str == "") {
|
|
|
|
+ var length = s.length;
|
|
|
|
+ if(startIndex < 0) {
|
|
|
|
+ startIndex = length + startIndex;
|
|
|
|
+ if(startIndex < 0) startIndex = 0;
|
|
|
|
+ }
|
|
|
|
+ return startIndex > length ? length : startIndex;
|
|
|
|
+ }
|
|
|
|
+ return Syntax.callField(s, "find", str, startIndex);
|
|
}
|
|
}
|
|
|
|
|
|
@:ifFeature("dynamic_read.toString", "anon_optional_read.toString", "python.internal.StringImpl.toString")
|
|
@:ifFeature("dynamic_read.toString", "anon_optional_read.toString", "python.internal.StringImpl.toString")
|