<p>
This page tests cached access to properties of dictionary objects and objects
with changing prototypes. 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.\n");
        } else {
            log("FAIL: " + aDescription + " should be " + b + " but instead is " + a + ".\n");
        }
    }
    
    (function() {
        function getX(o)
        {
            return o.x;
        }
        
        var o = {
            x: 0,
            y: 0
        };

        getX(o);
        getX(o);
        
        for (var i = 0; i < 128; ++i)
            o["p" + i] = 1;
        
        shouldBe(getX(o), "getX(o)", 0);
    })();

    (function() {
        function getProtoX(o)
        {
            return o.protoX;
        }

        var o = {
            __proto__ : {
                protoX: 0,
                protoY: 0
            },
        };

        getProtoX(o);
        getProtoX(o);
        
        o.__proto__ = {
            protoY: 1,
            protoX: 2
        };

        shouldBe(getProtoX(o), "getProtoX(o)", 2);
    })();

    (function() {
        function getProtoX(o)
        {
            return o.protoX;
        }

        var o = {
            __proto__ : {
                protoX: 0,
                protoY: 0
            },
        };

        getProtoX(o);
        getProtoX(o);
        
        delete o.__proto__.protoX;

        shouldBe(getProtoX(o), "getProtoX(o)", undefined);
    })();
})();
</script>
