v8/test/mjsunit/destruct-array-spread-done.js
Gus Caplan 83f778aff1 Add iterator done check in spread destructuring
This fixes the logic in the desugaring of destructuring assignments. In
particular, a spread element would not check if previous `next` results
had already been done, and would always call `next()` again.

Change-Id: I1bd384678722e6cf51c5777fc3b0dd965360291a
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2430488
Commit-Queue: Gus Caplan <snek@chromium.org>
Reviewed-by: Leszek Swirski <leszeks@chromium.org>
Cr-Commit-Position: refs/heads/master@{#70144}
2020-09-25 19:08:17 +00:00

27 lines
483 B
JavaScript

// Copyright 2020 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
'use strict';
let called = 0
const it = {
[Symbol.iterator]() {
return this;
},
next() {
called += 1;
return {
value: 42,
done: true,
};
},
};
const [a, b, ...c] = it;
assertEquals(called, 1);
assertEquals(a, undefined);
assertEquals(b, undefined);
assertEquals(c.length, 0);