Skip to content

Commit 9f904ff

Browse files
creliercommit-bot@chromium.org
authored andcommitted
[VM/runtime] Remove intermediate array copy step when rehashing types.
Change-Id: Iffe90ef347b026f87cc21c07710fbfea34f36413 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/150697 Reviewed-by: Alexander Markov <[email protected]> Commit-Queue: Régis Crelier <[email protected]>
1 parent 1f32f65 commit 9f904ff

File tree

1 file changed

+12
-32
lines changed

1 file changed

+12
-32
lines changed

runtime/vm/class_finalizer.cc

Lines changed: 12 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1643,23 +1643,17 @@ void ClassFinalizer::RehashTypes() {
16431643

16441644
// Rehash the canonical Types table.
16451645
ObjectStore* object_store = I->object_store();
1646-
GrowableObjectArray& types =
1647-
GrowableObjectArray::Handle(Z, GrowableObjectArray::New());
1648-
Array& types_array = Array::Handle(Z);
1646+
Array& types = Array::Handle(Z);
16491647
Type& type = Type::Handle(Z);
16501648
{
16511649
CanonicalTypeSet types_table(Z, object_store->canonical_types());
1652-
types_array = HashTables::ToArray(types_table, false);
1653-
for (intptr_t i = 0; i < types_array.Length(); i++) {
1654-
type ^= types_array.At(i);
1655-
types.Add(type);
1656-
}
1650+
types = HashTables::ToArray(types_table, false);
16571651
types_table.Release();
16581652
}
16591653

16601654
intptr_t dict_size = Utils::RoundUpToPowerOfTwo(types.Length() * 4 / 3);
1661-
types_array = HashTables::New<CanonicalTypeSet>(dict_size, Heap::kOld);
1662-
CanonicalTypeSet types_table(Z, types_array.raw());
1655+
CanonicalTypeSet types_table(
1656+
Z, HashTables::New<CanonicalTypeSet>(dict_size, Heap::kOld));
16631657
for (intptr_t i = 0; i < types.Length(); i++) {
16641658
type ^= types.At(i);
16651659
bool present = types_table.Insert(type);
@@ -1669,25 +1663,18 @@ void ClassFinalizer::RehashTypes() {
16691663
object_store->set_canonical_types(types_table.Release());
16701664

16711665
// Rehash the canonical TypeParameters table.
1672-
Array& typeparams_array = Array::Handle(Z);
1673-
GrowableObjectArray& typeparams =
1674-
GrowableObjectArray::Handle(Z, GrowableObjectArray::New());
1666+
Array& typeparams = Array::Handle(Z);
16751667
TypeParameter& typeparam = TypeParameter::Handle(Z);
16761668
{
16771669
CanonicalTypeParameterSet typeparams_table(
16781670
Z, object_store->canonical_type_parameters());
1679-
typeparams_array = HashTables::ToArray(typeparams_table, false);
1680-
for (intptr_t i = 0; i < typeparams_array.Length(); i++) {
1681-
typeparam ^= typeparams_array.At(i);
1682-
typeparams.Add(typeparam);
1683-
}
1671+
typeparams = HashTables::ToArray(typeparams_table, false);
16841672
typeparams_table.Release();
16851673
}
16861674

16871675
dict_size = Utils::RoundUpToPowerOfTwo(typeparams.Length() * 4 / 3);
1688-
typeparams_array =
1689-
HashTables::New<CanonicalTypeParameterSet>(dict_size, Heap::kOld);
1690-
CanonicalTypeParameterSet typeparams_table(Z, typeparams_array.raw());
1676+
CanonicalTypeParameterSet typeparams_table(
1677+
Z, HashTables::New<CanonicalTypeParameterSet>(dict_size, Heap::kOld));
16911678
for (intptr_t i = 0; i < typeparams.Length(); i++) {
16921679
typeparam ^= typeparams.At(i);
16931680
bool present = typeparams_table.Insert(typeparam);
@@ -1696,18 +1683,12 @@ void ClassFinalizer::RehashTypes() {
16961683
object_store->set_canonical_type_parameters(typeparams_table.Release());
16971684

16981685
// Rehash the canonical TypeArguments table.
1699-
Array& typeargs_array = Array::Handle(Z);
1700-
GrowableObjectArray& typeargs =
1701-
GrowableObjectArray::Handle(Z, GrowableObjectArray::New());
1686+
Array& typeargs = Array::Handle(Z);
17021687
TypeArguments& typearg = TypeArguments::Handle(Z);
17031688
{
17041689
CanonicalTypeArgumentsSet typeargs_table(
17051690
Z, object_store->canonical_type_arguments());
1706-
typeargs_array = HashTables::ToArray(typeargs_table, false);
1707-
for (intptr_t i = 0; i < typeargs_array.Length(); i++) {
1708-
typearg ^= typeargs_array.At(i);
1709-
typeargs.Add(typearg);
1710-
}
1691+
typeargs = HashTables::ToArray(typeargs_table, false);
17111692
typeargs_table.Release();
17121693
}
17131694

@@ -1716,9 +1697,8 @@ void ClassFinalizer::RehashTypes() {
17161697
I->RehashConstants();
17171698

17181699
dict_size = Utils::RoundUpToPowerOfTwo(typeargs.Length() * 4 / 3);
1719-
typeargs_array =
1720-
HashTables::New<CanonicalTypeArgumentsSet>(dict_size, Heap::kOld);
1721-
CanonicalTypeArgumentsSet typeargs_table(Z, typeargs_array.raw());
1700+
CanonicalTypeArgumentsSet typeargs_table(
1701+
Z, HashTables::New<CanonicalTypeArgumentsSet>(dict_size, Heap::kOld));
17221702
for (intptr_t i = 0; i < typeargs.Length(); i++) {
17231703
typearg ^= typeargs.At(i);
17241704
bool present = typeargs_table.Insert(typearg);

0 commit comments

Comments
 (0)