// The decompiler correctly handles for-of loops.

function tokens(code) {
    var arr = [];
    var s = code.replace(/\w+|[^\s]/g, function (tok) { arr.push(tok); return ""; });
    assertEq(s.trim(), "", "tokens() should find all tokens in code: " + uneval(code));
    return arr;
}

function test(code) {
    var before = "function f() { " + code + " }";
    var after = eval("(" + before + ")").toString();
    assertEq(tokens(before).join(" "), tokens(after).join(" "), "decompiler failed to round-trip");
}

// statements
test("for (a of b) { f(a); }");
test("for (a of b) { f(a); g(a); }");

// for-of with "in" operator nearby
test("for (a of b in c ? c : c.items()) { f(a); }");

// destructuring
test("for ([a, b] of c) { a.m(b); }");

// for-let-of
test("for (let a of b) { f(a); }");
test("for (let [a, b] of c) { a.m(b); }");

// array comprehensions
test("return [a for (a of b)];");
test("return [[b, a] for ([a, b] of c.items())];");

// generator expressions
test("return (a for (a of b));");

