nodejs/deps/v8/test/mjsunit/regress/regress-crbug-1357318.js
Michaël Zasso edd537ca2f deps: update V8 to 10.8.168.20
PR-URL: https://github.com/nodejs/node/pull/45230
Reviewed-By: Jiawen Geng <technicalcute@gmail.com>
Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
2022-11-19 09:11:32 +00:00

103 lines
2.1 KiB
JavaScript

// Copyright 2022 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 array_iterator() {
let count = 0;
[].values().__proto__.return = function(value) {
++count;
return {value: value, done: true};
};
let array = [1, 2, 3, 4, 5, 6, 7, 8];
// Aborted iteration in a builtin.
try {
new WeakSet(array);
} catch (e) {}
assertEquals(count, 1);
// Aborted iteration via for..of.
let i = array.length / 2;
for (c of array) {
if (--i == 0) break;
}
assertEquals(count, 2);
})();
(function set_iterator() {
let count = 0;
new Set().values().__proto__.return = function(value) {
++count;
return {value: value, done: true};
};
let set = new Set();
for (let i = 0; i < 26; i++) {
set.add("item" + i);
}
// Aborted iteration in a builtin.
try {
new WeakSet(set);
} catch (e) {}
assertEquals(count, 1);
// Aborted iteration via for..of.
let i = set.size / 2;
for (c of set.values()) {
if (--i == 0) break;
}
assertEquals(count, 2);
})();
(function map_iterator() {
let count = 0;
new Map().values().__proto__.return = function(value) {
++count;
return {value: value, done: true};
};
let map = new Map();
for (let i = 0; i < 26; i++) {
map.set(String.fromCharCode(97 + i), i);
}
// Aborted iteration in a builtin.
try {
new WeakMap(map);
} catch (e) {}
assertEquals(count, 1);
// Aborted iteration via for..of.
let i = map.size / 2;
for (c of map.keys()) {
if (--i == 0) break;
}
assertEquals(count, 2);
})();
(function string_iterator() {
let count = 0;
let str = "some long string";
let iterator = str[Symbol.iterator]();
iterator.__proto__.return = function(value) {
++count;
return {value: value, done: true};
};
// Aborted iteration in a builtin.
try {
new WeakSet(iterator);
} catch (e) {}
assertEquals(count, 1);
// Aborted iteration via for..of.
let i = str.length / 2;
for (c of iterator) {
if (--i == 0) break;
}
assertEquals(count, 2);
})();