Fix default fromIndex in String#lastIndexOf (#165)

This commit is contained in:
Max Graey 2018-07-13 14:30:48 +03:00 committed by Daniel Wirtz
parent cd14b296ce
commit 5ce57a6434
4 changed files with 935 additions and 726 deletions

View File

@ -229,17 +229,17 @@ export class String {
return -1; return -1;
} }
lastIndexOf(searchString: String, fromIndex: i32 = 0): i32 { lastIndexOf(searchString: String, fromIndex: i32 = i32.MAX_VALUE): i32 {
assert(this !== null); assert(this !== null);
if (searchString === null) searchString = changetype<String>("null"); if (searchString === null) searchString = changetype<String>("null");
var len: isize = this.length; var len: isize = this.length;
var searchLen: isize = searchString.length; var searchLen: isize = searchString.length;
if (!searchLen) return len; if (!searchLen) return len;
if (!len) return -1; if (!len) return -1;
var start = clamp<isize>(fromIndex - searchLen, 0, len); var start = clamp<isize>(fromIndex, 0, len - searchLen);
// TODO: multiple char codes // TODO: multiple char codes
for (let k: isize = len - 1; k >= start; --k) { for (let k = start; k >= 0; --k) {
if (!compare_memory( if (!compare_memory(
changetype<usize>(this) + HEADER_SIZE + (k << 1), changetype<usize>(this) + HEADER_SIZE + (k << 1),
changetype<usize>(searchString) + HEADER_SIZE, changetype<usize>(searchString) + HEADER_SIZE,

File diff suppressed because it is too large Load Diff

View File

@ -28,9 +28,12 @@ assert("".lastIndexOf("hi") == -1);
assert(str.lastIndexOf("") == str.length); assert(str.lastIndexOf("") == str.length);
assert(str.lastIndexOf(",") == 2); assert(str.lastIndexOf(",") == 2);
assert(str.lastIndexOf("x") == -1); assert(str.lastIndexOf("x") == -1);
assert(str.lastIndexOf("g") == 15);
assert(str.lastIndexOf(",", 2) == 2); assert(str.lastIndexOf(",", 2) == 2);
assert(str.lastIndexOf(",", 3) == 2); assert(str.lastIndexOf(",", 3) == 2);
assert(str.lastIndexOf(", I", -1) == 2); assert(str.lastIndexOf(", I", -1) == -1);
assert(str.lastIndexOf("i", 0) == -1);
assert(str.lastIndexOf("hi", 0) == 0);
export function getString(): string { export function getString(): string {
return str; return str;

File diff suppressed because it is too large Load Diff