[vm] Add unsafeCasts to _rehashObjects to avoid dynamic calls.

Change-Id: Ifed38316045c8137b491ce0008ec78570f9dc4c0
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/265921
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Kallen Tu <kallentu@google.com>
This commit is contained in:
Kallen Tu 2022-10-26 23:27:40 +00:00 committed by Commit Queue
parent 397afd14de
commit 21039dc83b
2 changed files with 5 additions and 4 deletions

View file

@ -10,7 +10,7 @@ part of "core_patch.dart";
void _rehashObjects(List objects) {
final int length = objects.length;
for (int i = 0; i < length; ++i) {
objects[i]._rehash();
unsafeCast<Expando>(objects[i])._rehash();
}
}

View file

@ -18,7 +18,7 @@ import "dart:typed_data" show Uint32List;
void _rehashObjects(List objects) {
final int length = objects.length;
for (int i = 0; i < length; ++i) {
objects[i]._regenerateIndex();
internal.unsafeCast<_HashBase>(objects[i])._regenerateIndex();
}
}
@ -230,6 +230,9 @@ mixin _HashBase on _HashAbstractBase {
_deletedKeys = other._deletedKeys;
return true;
}
// This method is called by [_rehashObjects] (see above).
void _regenerateIndex();
}
abstract class _EqualsAndHashCode {
@ -437,7 +440,6 @@ mixin _LinkedHashMapMixin<K, V> on _HashBase, _EqualsAndHashCode {
}
}
// This method is called by [_rehashObjects] (see above).
void _regenerateIndex() {
_index =
_data.length == 0 ? _uninitializedIndex : new Uint32List(_data.length);
@ -932,7 +934,6 @@ mixin _LinkedHashSetMixin<E> on _HashBase, _EqualsAndHashCode {
Iterator<E> get iterator =>
_CompactIterator<E>(this, _data, _usedData, -1, 1);
// This method is called by [_rehashObjects] (see above).
void _regenerateIndex() {
final size =
_roundUpToPowerOfTwo(max(_data.length, _HashBase._INITIAL_INDEX_SIZE));