4edf16ddd9
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}
24 lines
549 B
JavaScript
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);
|