| //@ slow! |
| |
| function shouldBe(actual, expected) |
| { |
| if (actual !== expected) |
| throw new Error('bad value: ' + actual); |
| } |
| |
| function test(num) |
| { |
| var regexp = /hello world/; |
| regexp.lastIndex = { ok: regexp, value: 42 }; |
| if (num === 0) |
| return regexp; |
| if (num === 1) |
| return regexp.lastIndex; |
| return regexp.lastIndex.value; |
| } |
| noInline(test); |
| |
| for (var i = 0; i < 1e6; ++i) { |
| var num = i % 3; |
| switch (num) { |
| case 0: |
| var regexp = test(num); |
| shouldBe(regexp instanceof RegExp, true); |
| shouldBe(typeof regexp.lastIndex, "object"); |
| shouldBe(regexp.lastIndex.ok, regexp); |
| break; |
| case 1: |
| var object = test(num); |
| shouldBe(object.value, 42); |
| shouldBe(object.ok instanceof RegExp, true); |
| shouldBe(object.ok.lastIndex, object); |
| break; |
| case 2: |
| var value = test(num); |
| shouldBe(value, 42); |
| break; |
| } |
| } |