// The decompiler can handle the implicit call to @@iterator in a for-of loop. var x; function check(code, msg) { var s = "no exception thrown"; try { eval(code); } catch (exc) { s = exc.message; } assertEq(s, msg); } x = {}; check("for (var v of x) throw fit;", "x is not iterable"); check("[...x]", "x is not iterable"); check("Math.hypot(...x)", "x is not iterable"); x[Symbol.iterator] = "potato"; check("for (var v of x) throw fit;", "x is not iterable"); x[Symbol.iterator] = {}; check("for (var v of x) throw fit;", "x[Symbol.iterator] is not a function"); if (typeof reportCompare === "function") reportCompare(0, 0, "ok");