var seen = -1;

// Test to make sure the jits get the number of calls, and return value
// of setters correct. We should not be affected by whether the setter
// modifies its argument or returns some value.
function setter(x) {
    this.val = x;
    x = 255;
    bailout();
    seen++;
    assertEq(seen, this.val);
    return 5;
}

function F(){}
Object.defineProperty(F.prototype, "value" , ({set: setter}));

function test() {
    var obj = new F();
    var itrCount = 10000;
    for(var i = 0; i < itrCount; i++) {
        assertEq(obj.value = i, i);
        assertEq(obj.val, i);
    }
}
test();