deps: V8: cherry-pick 74571c8 · nodejs/node@cf649c9 (original) (raw)

`@@ -28644,7 +28644,7 @@ TEST(MicrotaskContextShouldBeNativeContext) {

`

28644

28644

` isolate->RunMicrotasks();

`

28645

28645

`}

`

28646

28646

``

28647

``

`-

TEST(PreviewSetIteratorEntriesWithDeleted) {

`

``

28647

`+

TEST(PreviewSetKeysIteratorEntriesWithDeleted) {

`

28648

28648

` LocalContext env;

`

28649

28649

` v8::HandleScope handle_scope(env->GetIsolate());

`

28650

28650

` v8::Localv8::Context context = env.local();

`

`@@ -28743,7 +28743,142 @@ TEST(PreviewSetIteratorEntriesWithDeleted) {

`

28743

28743

` }

`

28744

28744

`}

`

28745

28745

``

28746

``

`-

TEST(PreviewMapIteratorEntriesWithDeleted) {

`

``

28746

`+

TEST(PreviewSetValuesIteratorEntriesWithDeleted) {

`

``

28747

`+

LocalContext env;

`

``

28748

`+

v8::HandleScope handle_scope(env->GetIsolate());

`

``

28749

`+

v8::Localv8::Context context = env.local();

`

``

28750

+

``

28751

`+

{

`

``

28752

`+

// Create set, delete entry, create iterator, preview.

`

``

28753

`+

v8::Localv8::Object iterator =

`

``

28754

`+

CompileRun("var set = new Set([1,2,3]); set.delete(1); set.values()")

`

``

28755

`+

->ToObject(context)

`

``

28756

`+

.ToLocalChecked();

`

``

28757

`+

bool is_key;

`

``

28758

`+

v8::Localv8::Array entries =

`

``

28759

`+

iterator->PreviewEntries(&is_key).ToLocalChecked();

`

``

28760

`+

CHECK(!is_key);

`

``

28761

`+

CHECK_EQ(2, entries->Length());

`

``

28762

`+

CHECK_EQ(2, entries->Get(context, 0)

`

``

28763

`+

.ToLocalChecked()

`

``

28764

`+

->Int32Value(context)

`

``

28765

`+

.FromJust());

`

``

28766

`+

CHECK_EQ(3, entries->Get(context, 1)

`

``

28767

`+

.ToLocalChecked()

`

``

28768

`+

->Int32Value(context)

`

``

28769

`+

.FromJust());

`

``

28770

`+

}

`

``

28771

`+

{

`

``

28772

`+

// Create set, create iterator, delete entry, preview.

`

``

28773

`+

v8::Localv8::Object iterator =

`

``

28774

`+

CompileRun("var set = new Set([1,2,3]); set.values()")

`

``

28775

`+

->ToObject(context)

`

``

28776

`+

.ToLocalChecked();

`

``

28777

`+

CompileRun("set.delete(1);");

`

``

28778

`+

bool is_key;

`

``

28779

`+

v8::Localv8::Array entries =

`

``

28780

`+

iterator->PreviewEntries(&is_key).ToLocalChecked();

`

``

28781

`+

CHECK(!is_key);

`

``

28782

`+

CHECK_EQ(2, entries->Length());

`

``

28783

`+

CHECK_EQ(2, entries->Get(context, 0)

`

``

28784

`+

.ToLocalChecked()

`

``

28785

`+

->Int32Value(context)

`

``

28786

`+

.FromJust());

`

``

28787

`+

CHECK_EQ(3, entries->Get(context, 1)

`

``

28788

`+

.ToLocalChecked()

`

``

28789

`+

->Int32Value(context)

`

``

28790

`+

.FromJust());

`

``

28791

`+

}

`

``

28792

`+

{

`

``

28793

`+

// Create set, create iterator, delete entry, iterate, preview.

`

``

28794

`+

v8::Localv8::Object iterator =

`

``

28795

`+

CompileRun("var set = new Set([1,2,3]); var it = set.values(); it")

`

``

28796

`+

->ToObject(context)

`

``

28797

`+

.ToLocalChecked();

`

``

28798

`+

CompileRun("set.delete(1); it.next();");

`

``

28799

`+

bool is_key;

`

``

28800

`+

v8::Localv8::Array entries =

`

``

28801

`+

iterator->PreviewEntries(&is_key).ToLocalChecked();

`

``

28802

`+

CHECK(!is_key);

`

``

28803

`+

CHECK_EQ(1, entries->Length());

`

``

28804

`+

CHECK_EQ(3, entries->Get(context, 0)

`

``

28805

`+

.ToLocalChecked()

`

``

28806

`+

->Int32Value(context)

`

``

28807

`+

.FromJust());

`

``

28808

`+

}

`

``

28809

`+

{

`

``

28810

`+

// Create set, create iterator, delete entry, iterate until empty, preview.

`

``

28811

`+

v8::Localv8::Object iterator =

`

``

28812

`+

CompileRun("var set = new Set([1,2,3]); var it = set.values(); it")

`

``

28813

`+

->ToObject(context)

`

``

28814

`+

.ToLocalChecked();

`

``

28815

`+

CompileRun("set.delete(1); it.next(); it.next();");

`

``

28816

`+

bool is_key;

`

``

28817

`+

v8::Localv8::Array entries =

`

``

28818

`+

iterator->PreviewEntries(&is_key).ToLocalChecked();

`

``

28819

`+

CHECK(!is_key);

`

``

28820

`+

CHECK_EQ(0, entries->Length());

`

``

28821

`+

}

`

``

28822

`+

{

`

``

28823

`+

// Create set, create iterator, delete entry, iterate, trigger rehash,

`

``

28824

`+

// preview.

`

``

28825

`+

v8::Localv8::Object iterator =

`

``

28826

`+

CompileRun("var set = new Set([1,2,3]); var it = set.values(); it")

`

``

28827

`+

->ToObject(context)

`

``

28828

`+

.ToLocalChecked();

`

``

28829

`+

CompileRun("set.delete(1); it.next();");

`

``

28830

`+

CompileRun("for (var i = 4; i < 20; i++) set.add(i);");

`

``

28831

`+

bool is_key;

`

``

28832

`+

v8::Localv8::Array entries =

`

``

28833

`+

iterator->PreviewEntries(&is_key).ToLocalChecked();

`

``

28834

`+

CHECK(!is_key);

`

``

28835

`+

CHECK_EQ(17, entries->Length());

`

``

28836

`+

for (uint32_t i = 0; i < 17; i++) {

`

``

28837

`+

CHECK_EQ(i + 3, entries->Get(context, i)

`

``

28838

`+

.ToLocalChecked()

`

``

28839

`+

->Int32Value(context)

`

``

28840

`+

.FromJust());

`

``

28841

`+

}

`

``

28842

`+

}

`

``

28843

`+

}

`

``

28844

+

``

28845

`+

TEST(PreviewMapEntriesIteratorEntries) {

`

``

28846

`+

LocalContext env;

`

``

28847

`+

v8::HandleScope handle_scope(env->GetIsolate());

`

``

28848

`+

v8::Localv8::Context context = env.local();

`

``

28849

`+

{

`

``

28850

`+

// Create set, delete entry, create entries iterator, preview.

`

``

28851

`+

v8::Localv8::Object iterator =

`

``

28852

`+

CompileRun("var set = new Set([1,2,3]); set.delete(2); set.entries()")

`

``

28853

`+

->ToObject(context)

`

``

28854

`+

.ToLocalChecked();

`

``

28855

`+

bool is_key;

`

``

28856

`+

v8::Localv8::Array entries =

`

``

28857

`+

iterator->PreviewEntries(&is_key).ToLocalChecked();

`

``

28858

`+

CHECK(is_key);

`

``

28859

`+

CHECK_EQ(4, entries->Length());

`

``

28860

`+

uint32_t first = entries->Get(context, 0)

`

``

28861

`+

.ToLocalChecked()

`

``

28862

`+

->Int32Value(context)

`

``

28863

`+

.FromJust();

`

``

28864

`+

uint32_t second = entries->Get(context, 2)

`

``

28865

`+

.ToLocalChecked()

`

``

28866

`+

->Int32Value(context)

`

``

28867

`+

.FromJust();

`

``

28868

`+

CHECK_EQ(1, first);

`

``

28869

`+

CHECK_EQ(3, second);

`

``

28870

`+

CHECK_EQ(first, entries->Get(context, 1)

`

``

28871

`+

.ToLocalChecked()

`

``

28872

`+

->Int32Value(context)

`

``

28873

`+

.FromJust());

`

``

28874

`+

CHECK_EQ(second, entries->Get(context, 3)

`

``

28875

`+

.ToLocalChecked()

`

``

28876

`+

->Int32Value(context)

`

``

28877

`+

.FromJust());

`

``

28878

`+

}

`

``

28879

`+

}

`

``

28880

+

``

28881

`+

TEST(PreviewMapValuesIteratorEntriesWithDeleted) {

`

28747

28882

` LocalContext env;

`

28748

28883

` v8::HandleScope handle_scope(env->GetIsolate());

`

28749

28884

` v8::Localv8::Context context = env.local();

`

`@@ -28858,6 +28993,97 @@ TEST(PreviewMapIteratorEntriesWithDeleted) {

`

28858

28993

` }

`

28859

28994

`}

`

28860

28995

``

``

28996

`+

TEST(PreviewMapKeysIteratorEntriesWithDeleted) {

`

``

28997

`+

LocalContext env;

`

``

28998

`+

v8::HandleScope handle_scope(env->GetIsolate());

`

``

28999

`+

v8::Localv8::Context context = env.local();

`

``

29000

+

``

29001

`+

{

`

``

29002

`+

// Create map, delete entry, create iterator, preview.

`

``

29003

`+

v8::Localv8::Object iterator = CompileRun(

`

``

29004

`+

"var map = new Map();"

`

``

29005

`+

"var key = 1; map.set(key, {});"

`

``

29006

`+

"map.set(2, {}); map.set(3, {});"

`

``

29007

`+

"map.delete(key);"

`

``

29008

`+

"map.keys()")

`

``

29009

`+

->ToObject(context)

`

``

29010

`+

.ToLocalChecked();

`

``

29011

`+

bool is_key;

`

``

29012

`+

v8::Localv8::Array entries =

`

``

29013

`+

iterator->PreviewEntries(&is_key).ToLocalChecked();

`

``

29014

`+

CHECK(!is_key);

`

``

29015

`+

CHECK_EQ(2, entries->Length());

`

``

29016

`+

CHECK_EQ(2, entries->Get(context, 0)

`

``

29017

`+

.ToLocalChecked()

`

``

29018

`+

->Int32Value(context)

`

``

29019

`+

.FromJust());

`

``

29020

`+

CHECK_EQ(3, entries->Get(context, 1)

`

``

29021

`+

.ToLocalChecked()

`

``

29022

`+

->Int32Value(context)

`

``

29023

`+

.FromJust());

`

``

29024

`+

}

`

``

29025

`+

{

`

``

29026

`+

// Create map, create iterator, delete entry, preview.

`

``

29027

`+

v8::Localv8::Object iterator = CompileRun(

`

``

29028

`+

"var map = new Map();"

`

``

29029

`+

"var key = 1; map.set(key, {});"

`

``

29030

`+

"map.set(2, {}); map.set(3, {});"

`

``

29031

`+

"map.keys()")

`

``

29032

`+

->ToObject(context)

`

``

29033

`+

.ToLocalChecked();

`

``

29034

`+

CompileRun("map.delete(key);");

`

``

29035

`+

bool is_key;

`

``

29036

`+

v8::Localv8::Array entries =

`

``

29037

`+

iterator->PreviewEntries(&is_key).ToLocalChecked();

`

``

29038

`+

CHECK(!is_key);

`

``

29039

`+

CHECK_EQ(2, entries->Length());

`

``

29040

`+

CHECK_EQ(2, entries->Get(context, 0)

`

``

29041

`+

.ToLocalChecked()

`

``

29042

`+

->Int32Value(context)

`

``

29043

`+

.FromJust());

`

``

29044

`+

CHECK_EQ(3, entries->Get(context, 1)

`

``

29045

`+

.ToLocalChecked()

`

``

29046

`+

->Int32Value(context)

`

``

29047

`+

.FromJust());

`

``

29048

`+

}

`

``

29049

`+

{

`

``

29050

`+

// Create map, create iterator, delete entry, iterate, preview.

`

``

29051

`+

v8::Localv8::Object iterator = CompileRun(

`

``

29052

`+

"var map = new Map();"

`

``

29053

`+

"var key = 1; map.set(key, {});"

`

``

29054

`+

"map.set(2, {}); map.set(3, {});"

`

``

29055

`+

"var it = map.keys(); it")

`

``

29056

`+

->ToObject(context)

`

``

29057

`+

.ToLocalChecked();

`

``

29058

`+

CompileRun("map.delete(key); it.next();");

`

``

29059

`+

bool is_key;

`

``

29060

`+

v8::Localv8::Array entries =

`

``

29061

`+

iterator->PreviewEntries(&is_key).ToLocalChecked();

`

``

29062

`+

CHECK(!is_key);

`

``

29063

`+

CHECK_EQ(1, entries->Length());

`

``

29064

`+

CHECK_EQ(3, entries->Get(context, 0)

`

``

29065

`+

.ToLocalChecked()

`

``

29066

`+

->Int32Value(context)

`

``

29067

`+

.FromJust());

`

``

29068

`+

}

`

``

29069

`+

{

`

``

29070

`+

// Create map, create iterator, delete entry, iterate until empty, preview.

`

``

29071

`+

v8::Localv8::Object iterator = CompileRun(

`

``

29072

`+

"var map = new Map();"

`

``

29073

`+

"var key = 1; map.set(key, {});"

`

``

29074

`+

"map.set(2, {}); map.set(3, {});"

`

``

29075

`+

"var it = map.keys(); it")

`

``

29076

`+

->ToObject(context)

`

``

29077

`+

.ToLocalChecked();

`

``

29078

`+

CompileRun("map.delete(key); it.next(); it.next();");

`

``

29079

`+

bool is_key;

`

``

29080

`+

v8::Localv8::Array entries =

`

``

29081

`+

iterator->PreviewEntries(&is_key).ToLocalChecked();

`

``

29082

`+

CHECK(!is_key);

`

``

29083

`+

CHECK_EQ(0, entries->Length());

`

``

29084

`+

}

`

``

29085

`+

}

`

``

29086

+

28861

29087

`namespace {

`

28862

29088

`static v8::Isolate* isolate_1;

`

28863

29089

`static v8::Isolate* isolate_2;

`