function assert(b) {
    if (!b)
        throw new Error("uh oh");
}

let flag = false;
let o = {
    valueOf() {
        if (flag)
            throw new Error("by by");
        return 13.5;
    }
};
noInline(o.valueOf);

function baz() { return 1.5; }
noInline(baz);

function foo(x, o) {
    let r = baz();
    try {
        r = x - o - r;
    } catch(e) { }
    return r;
}
noInline(foo);

let x = 20.5;
for (let i = 0; i < 10000; i++) {
    assert(foo(x, o) === 5.5);
}
flag = true;
assert(foo(x, o) === 1.5);


function bar(x, o) {
    let caughtException = false;
    var r = null;
    try {
        // This tests aliasing of left/right with result register in a SubGenerator
        // and ensures that the sub will spill the register properly and that we value
        // recover properly.
        r = x - o;
    } catch(e) {
        caughtException = true;
        assert(r === null);
    }
    if (!caughtException)
        assert(r === 7);
    return caughtException;
} 
noInline(bar);

flag = false;
for (let i = 0; i < 10000; i++) {
    assert(bar(x, o) === false);
}
flag = true;
assert(bar(x, o) === true);
