v8/test/mjsunit/es6/regress/regress-4759.js
neis 4edf16ddd9 Fix treatment of rest pattern in array destructuring.
When seeing a rest pattern, we used to get the remaining elements from the
iterator by calling %concat_iterable_to_array on it.  This was wrong because it
caused an observable [[Get]] for @@iterator (which the iterator may not even
provide).

This CL gets rid of the call to %concat_iterable_to_array and does the iteration
manually in a simple while-loop.  It also gets rid of %concat_iterable_to_array
itself because there aren't any other uses of it.

BUG=v8:4759
LOG=n
R=adamk@chromium.org

Review URL: https://codereview.chromium.org/1852703002

Cr-Commit-Position: refs/heads/master@{#35251}
2016-04-05 08:56:51 +00:00

24 lines
549 B
JavaScript

// Copyright 2016 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.
function iterable(done) {
return {
[Symbol.iterator]: function() {
return {
next: function() {
if (done) return { done: true };
done = true;
return { value: 42, done: false };
}
}
}
}
}
var [...result] = iterable(true);
assertEquals([], result);
var [...result] = iterable(false);
assertEquals([42], result);