Просмотр исходного кода

[MERGE #130] fix String#lastIndexOf for non ASCII strings

Merge pull request #130 from sankha93:lastindexof_pos
Fixes #120
Gorkem Yakin 10 лет назад
Родитель
Сommit
5f456bc413

+ 2 - 2
lib/Runtime/Library/JavascriptString.cpp

@@ -1195,9 +1195,9 @@ case_2:
         if (!fAsciiJumpTable)
         {
             wchar_t const * start = inputStr;
-            wchar_t const * current = inputStr + len - 1;
+            wchar_t const * current = inputStr + min(position, len - 1);
             wchar_t const * searchStrEnd = searchStr + searchLen - 1;
-            while (current >= start)
+            while (current >= (start + searchLen - 1))
             {
                 wchar_t const * s1 = current;
                 wchar_t const * s2 = searchStrEnd;

+ 5 - 0
test/Strings/lastindexof.baseline

@@ -13,4 +13,9 @@
 3
 0
 2
+-1
+3
+3
+0
+-1
 3

+ 7 - 0
test/Strings/lastindexof.js

@@ -27,6 +27,13 @@ WScript.Echo(str2.lastIndexOf("\0ab"));
 var str3 = "\u0100\u0111\u0112\u0113";
 WScript.Echo(str3.lastIndexOf("\u0112\u0113"));
 
+var str4 = "\u0061\u0062\u0063\u3042\u3044";
+WScript.Echo(str4.lastIndexOf("\u3042\u3044", 1));
+WScript.Echo(str4.lastIndexOf("\u3042\u3044"));
+WScript.Echo(str4.lastIndexOf("\u3042\u3044", 4));
+WScript.Echo("\u3042\u3044\u0061".lastIndexOf("\u3042\u3044", 3));
+WScript.Echo(str4.lastIndexOf("\u3044\0", 5));
+
 //implicit calls
 var a = 1;
 var b = 2;