//@ skip if $model == "Apple Watch Series 3" # added by mark-jsc-stress-test.py
"use strict";

function clobber() { }
noInline(clobber);

class C { }
class D { }

function foo(x, C) {
    clobber();
    return x instanceof C;
}
noInline(foo);

function access(o) {
    return o.foo0;
}
noInline(access);

function theClass(i) {
    if (i & 1)
        return C;
    return D;
}
noInline(theClass);

let x = new C;
for (let i = 0; i < 1000; ++i) {
    let k = theClass(i);
    if (i < 20)
        k["foo" + i] = i;
    if (i >= 20)
        access(k);
    if (i === 100)
        k["foo" + i] = i;
    let result = foo(x, k);
    if (k === C && result !== true)
        throw new Error("Bad")
    if (k !== C && result !== false)
        throw new Error("Bad")
}
