<p>
This page tests for correct behavior in the case of a prototype that transitions
to dictionary status. If the test passes, you'll see a series of PASS messages below.
</p>
<pre id="console"></pre>
<script>
(function() {
if (window.testRunner)
testRunner.dumpAsText();
function log(s)
{
if (this.document)
document.getElementById("console").appendChild(document.createTextNode(s + "\n"));
else
print(s + "\n");
}
function shouldBe(a, aDescription, b)
{
if (a === b) {
log("PASS: " + aDescription + " should be " + b + " and is.");
} else {
log("FAIL: " + aDescription + " should be " + b + " but instead is " + a + ".");
}
}
function getSlice(array)
{
return array.slice;
}
var array = [ ];
var slice = array.slice;
// Transition the array prototype to dictionary mode.
for (var i = 0; i < 256; ++i)
Array.prototype["p" + i] = 1;
// Try to cache access to an array prototype property (slice).
getSlice(array);
getSlice(array);
// Force the array prototype to rehash its storage.
for (var i = 256; i < 512; ++i)
Array.prototype["p" + i] = 1;
// Use previously cached access to slice.
shouldBe(slice === getSlice(array), "slice === getSlice(array)", true);
// Try to cache access to an array prototype property (slice).
getSlice(array);
getSlice(array);
shouldBe(slice === getSlice(array), "slice === getSlice(array)", true);
})();
</script>