util: update set iterator entries inspection
The inspection output for Set#entries() was wrong so far as it did not return an array as it should have. That was a bug in V8 that is now fixed and the code in Node.js has to be updated accordingly. PR-URL: https://github.com/nodejs/node/pull/25941 Fixes: https://github.com/nodejs/node/issues/24629 Reviewed-By: Michaël Zasso <targos@protonmail.com>
This commit is contained in:
parent
e557647470
commit
3d62d0c480
@ -595,11 +595,11 @@ function formatRaw(ctx, value, recurseTimes, typedArray) {
|
|||||||
} else if (isMapIterator(value)) {
|
} else if (isMapIterator(value)) {
|
||||||
keys = getKeys(value, ctx.showHidden);
|
keys = getKeys(value, ctx.showHidden);
|
||||||
braces = [`[${tag}] {`, '}'];
|
braces = [`[${tag}] {`, '}'];
|
||||||
formatter = formatMapIterator;
|
formatter = formatIterator;
|
||||||
} else if (isSetIterator(value)) {
|
} else if (isSetIterator(value)) {
|
||||||
keys = getKeys(value, ctx.showHidden);
|
keys = getKeys(value, ctx.showHidden);
|
||||||
braces = [`[${tag}] {`, '}'];
|
braces = [`[${tag}] {`, '}'];
|
||||||
formatter = formatSetIterator;
|
formatter = formatIterator;
|
||||||
} else {
|
} else {
|
||||||
noIterator = true;
|
noIterator = true;
|
||||||
}
|
}
|
||||||
@ -731,10 +731,10 @@ function formatRaw(ctx, value, recurseTimes, typedArray) {
|
|||||||
}
|
}
|
||||||
if (isMapIterator(value)) {
|
if (isMapIterator(value)) {
|
||||||
braces = [`[${tag || 'Map Iterator'}] {`, '}'];
|
braces = [`[${tag || 'Map Iterator'}] {`, '}'];
|
||||||
formatter = formatMapIterator;
|
formatter = formatIterator;
|
||||||
} else if (isSetIterator(value)) {
|
} else if (isSetIterator(value)) {
|
||||||
braces = [`[${tag || 'Set Iterator'}] {`, '}'];
|
braces = [`[${tag || 'Set Iterator'}] {`, '}'];
|
||||||
formatter = formatSetIterator;
|
formatter = formatIterator;
|
||||||
// Handle other regular objects again.
|
// Handle other regular objects again.
|
||||||
} else if (keys.length === 0) {
|
} else if (keys.length === 0) {
|
||||||
if (isExternal(value))
|
if (isExternal(value))
|
||||||
@ -1091,12 +1091,7 @@ function formatWeakMap(ctx, value, recurseTimes) {
|
|||||||
return formatMapIterInner(ctx, recurseTimes, entries, kWeak);
|
return formatMapIterInner(ctx, recurseTimes, entries, kWeak);
|
||||||
}
|
}
|
||||||
|
|
||||||
function formatSetIterator(ctx, value, recurseTimes) {
|
function formatIterator(ctx, value, recurseTimes) {
|
||||||
const entries = previewEntries(value);
|
|
||||||
return formatSetIterInner(ctx, recurseTimes, entries, kIterator);
|
|
||||||
}
|
|
||||||
|
|
||||||
function formatMapIterator(ctx, value, recurseTimes) {
|
|
||||||
const [entries, isKeyValue] = previewEntries(value, true);
|
const [entries, isKeyValue] = previewEntries(value, true);
|
||||||
if (isKeyValue) {
|
if (isKeyValue) {
|
||||||
return formatMapIterInner(ctx, recurseTimes, entries, kMapEntries);
|
return formatMapIterInner(ctx, recurseTimes, entries, kMapEntries);
|
||||||
|
@ -100,7 +100,7 @@ static void PreviewEntries(const FunctionCallbackInfo<Value>& args) {
|
|||||||
Local<Array> entries;
|
Local<Array> entries;
|
||||||
if (!args[0].As<Object>()->PreviewEntries(&is_key_value).ToLocal(&entries))
|
if (!args[0].As<Object>()->PreviewEntries(&is_key_value).ToLocal(&entries))
|
||||||
return;
|
return;
|
||||||
// Fast path for WeakMap, WeakSet and Set iterators.
|
// Fast path for WeakMap and WeakSet.
|
||||||
if (args.Length() == 1)
|
if (args.Length() == 1)
|
||||||
return args.GetReturnValue().Set(entries);
|
return args.GetReturnValue().Set(entries);
|
||||||
|
|
||||||
|
@ -995,7 +995,8 @@ if (typeof Symbol !== 'undefined') {
|
|||||||
const aSet = new Set([1, 3]);
|
const aSet = new Set([1, 3]);
|
||||||
assert.strictEqual(util.inspect(aSet.keys()), '[Set Iterator] { 1, 3 }');
|
assert.strictEqual(util.inspect(aSet.keys()), '[Set Iterator] { 1, 3 }');
|
||||||
assert.strictEqual(util.inspect(aSet.values()), '[Set Iterator] { 1, 3 }');
|
assert.strictEqual(util.inspect(aSet.values()), '[Set Iterator] { 1, 3 }');
|
||||||
assert.strictEqual(util.inspect(aSet.entries()), '[Set Iterator] { 1, 3 }');
|
assert.strictEqual(util.inspect(aSet.entries()),
|
||||||
|
'[Set Iterator] { [ 1, 1 ], [ 3, 3 ] }');
|
||||||
// Make sure the iterator doesn't get consumed.
|
// Make sure the iterator doesn't get consumed.
|
||||||
const keys = aSet.keys();
|
const keys = aSet.keys();
|
||||||
assert.strictEqual(util.inspect(keys), '[Set Iterator] { 1, 3 }');
|
assert.strictEqual(util.inspect(keys), '[Set Iterator] { 1, 3 }');
|
||||||
@ -1609,7 +1610,7 @@ assert.strictEqual(util.inspect('"\'${a}'), "'\"\\'${a}'");
|
|||||||
[{ a: 5 }, '{ a: 5 }'],
|
[{ a: 5 }, '{ a: 5 }'],
|
||||||
[new Set([1, 2]), 'Set { 1, 2 }'],
|
[new Set([1, 2]), 'Set { 1, 2 }'],
|
||||||
[new Map([[1, 2]]), 'Map { 1 => 2 }'],
|
[new Map([[1, 2]]), 'Map { 1 => 2 }'],
|
||||||
[new Set([1, 2]).entries(), '[Set Iterator] { 1, 2 }'],
|
[new Set([1, 2]).entries(), '[Set Iterator] { [ 1, 1 ], [ 2, 2 ] }'],
|
||||||
[new Map([[1, 2]]).keys(), '[Map Iterator] { 1 }'],
|
[new Map([[1, 2]]).keys(), '[Map Iterator] { 1 }'],
|
||||||
[new Date(2000), '1970-01-01T00:00:02.000Z'],
|
[new Date(2000), '1970-01-01T00:00:02.000Z'],
|
||||||
[new Uint8Array(2), 'Uint8Array [ 0, 0 ]'],
|
[new Uint8Array(2), 'Uint8Array [ 0, 0 ]'],
|
||||||
|
Loading…
x
Reference in New Issue
Block a user