| function shouldBe(actual, expected) |
| { |
| if (actual !== expected) |
| throw new Error('bad value: ' + actual); |
| } |
| |
| function test(num, string) |
| { |
| var regexp = /hello/g; |
| regexp.lastIndex = "Cocoa"; |
| if (num === 2) |
| return regexp.lastIndex; |
| var result = string.match(regexp); |
| if (num === 1) { |
| OSRExit(); |
| return [result, regexp]; |
| } |
| return regexp.lastIndex; |
| } |
| noInline(test); |
| |
| for (var i = 0; i < 1e5; ++i) { |
| var num = i % 3; |
| switch (num) { |
| case 0: |
| shouldBe(test(num, "hellohello"), 0); |
| break; |
| case 1: |
| break; |
| case 2: |
| shouldBe(test(num, "hellohello"), "Cocoa"); |
| break; |
| } |
| } |
| |
| var [result, regexp] = test(1, "hellohello"); |
| shouldBe(regexp instanceof RegExp, true); |
| shouldBe(regexp.lastIndex, 0); |
| shouldBe(result.length, 2); |
| shouldBe(result[0], "hello"); |
| shouldBe(result[1], "hello"); |