<!DOCTYPE html>
<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
</head>
<body>
<script>
description('Check that custom accessor being redefined invalidates our inline caches.');

(function() {
    "use strict";

    let setterCalled = false;

    function accessProperty() {
        let oScript = document.createElement("script");
        oScript.src = Math.random();
    }

    // Force "code optimization" by calling the function several times
    for (let i = 0; i < 1000; i++) {
        accessProperty();
    }

    // Define a custom setter for HTMLScriptElement#src
    const descriptor = Object.getOwnPropertyDescriptor(HTMLScriptElement.prototype, "src");
    Object.defineProperty(HTMLScriptElement.prototype, "src", {
        get: descriptor.get,
        set: function() {

            setterCalled = true;

            descriptor.set.apply(this, arguments);
        },
        enumerable: descriptor.enumerable,
        configurable: descriptor.configurable
    });
 
    accessProperty();

    if (setterCalled)
        testPassed("setter called as expected");
    else
        testFailed("Unexpected, setter not called.");
})();
</script>

<script src="../../resources/js-test-post.js"></script>
</body>
</html>
