Tests breakable locations in array destructuring. Running test: testBreakLocations function testFunction() { var [a, b, c = 4] = |C|generator1(); |_|[[a, b], c] = |C|generator2(); |_|[a, ...b] = |C|generator1(); |R|} function generator1() { |_|return { [Symbol.iterator]() { const it = |_|[1, 2].|C|values(); |_|return {next() { |_|return it.|C|next();|R| }};|R| } };|R| } function generator2() { |_|return { [Symbol.iterator]() { const it = |_|[|C|generator1(), 3].|C|values(); |_|return {next() { |_|return it.|C|next();|R| }};|R| } };|R| } |R| Running test: testStepping Execution paused in testFunction: function testFunction() { var [a, b, c = 4] = #generator1(); [[a, b], c] = generator2(); Execution paused in generator1: function generator1() { #return { [Symbol.iterator]() { Called from testFunction: function testFunction() { var [a, b, c = 4] = #generator1(); [[a, b], c] = generator2(); Execution paused in [Symbol.iterator]: [Symbol.iterator]() { const it = #[1, 2].values(); return {next() { return it.next(); }}; Called from testFunction: function testFunction() { var [a, b, c = 4] = #generator1(); [[a, b], c] = generator2(); Execution paused in next: const it = [1, 2].values(); return {next() { #return it.next(); }}; } Called from testFunction: function testFunction() { var [#a, b, c = 4] = generator1(); [[a, b], c] = generator2(); Execution paused in testFunction: var [a, b, c = 4] = generator1(); #[[a, b], c] = generator2(); [a, ...b] = generator1(); Execution paused in generator2: function generator2() { #return { [Symbol.iterator]() { Called from testFunction: var [a, b, c = 4] = generator1(); [[a, b], c] = #generator2(); [a, ...b] = generator1(); Execution paused in [Symbol.iterator]: [Symbol.iterator]() { const it = #[generator1(), 3].values(); return {next() { return it.next(); }}; Called from testFunction: var [a, b, c = 4] = generator1(); [[a, b], c] #= generator2(); [a, ...b] = generator1(); Execution paused in next: const it = [generator1(), 3].values(); return {next() { #return it.next(); }}; } Called from testFunction: var [a, b, c = 4] = generator1(); [#[a, b], c] = generator2(); [a, ...b] = generator1(); Execution paused in [Symbol.iterator]: [Symbol.iterator]() { const it = #[1, 2].values(); return {next() { return it.next(); }}; Called from testFunction: var [a, b, c = 4] = generator1(); [#[a, b], c] = generator2(); [a, ...b] = generator1(); Execution paused in next: const it = [1, 2].values(); return {next() { #return it.next(); }}; } Called from testFunction: var [a, b, c = 4] = generator1(); [[#a, b], c] = generator2(); [a, ...b] = generator1(); Execution paused in next: const it = [generator1(), 3].values(); return {next() { #return it.next(); }}; } Called from testFunction: var [a, b, c = 4] = generator1(); [[a, b], #c] = generator2(); [a, ...b] = generator1(); Execution paused in testFunction: [[a, b], c] = generator2(); #[a, ...b] = generator1(); } Execution paused in generator1: function generator1() { #return { [Symbol.iterator]() { Called from testFunction: [[a, b], c] = generator2(); [a, ...b] = #generator1(); } Execution paused in [Symbol.iterator]: [Symbol.iterator]() { const it = #[1, 2].values(); return {next() { return it.next(); }}; Called from testFunction: [[a, b], c] = generator2(); [a, ...b] #= generator1(); } Execution paused in next: const it = [1, 2].values(); return {next() { #return it.next(); }}; } Called from testFunction: [[a, b], c] = generator2(); [#a, ...b] = generator1(); } Execution paused in testFunction: [a, ...b] = generator1(); #} Resuming and finishing...