//@ 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; } }