| Index: runtime/vm/hash_table.h
 | 
| diff --git a/runtime/vm/hash_table.h b/runtime/vm/hash_table.h
 | 
| index c1622322137a2364d095f335ee86e41403ec263d..1f59c59af47b7d1d5494fe26a8c365559e579859 100644
 | 
| --- a/runtime/vm/hash_table.h
 | 
| +++ b/runtime/vm/hash_table.h
 | 
| @@ -151,21 +151,24 @@ class HashTable : public ValueObject {
 | 
|    // Returns the entry that matches 'key', or -1 if none exists.
 | 
|    template<typename Key>
 | 
|    intptr_t FindKey(const Key& key) const {
 | 
| -    ASSERT(NumOccupied() < NumEntries());
 | 
| +    const intptr_t num_entries = NumEntries();
 | 
| +    ASSERT(NumOccupied() < num_entries);
 | 
|      // TODO(koda): Add salt.
 | 
| -    intptr_t probe = static_cast<uword>(KeyTraits::Hash(key)) % NumEntries();
 | 
| +    uword hash = KeyTraits::Hash(key);
 | 
| +    intptr_t probe = hash % num_entries;
 | 
|      // TODO(koda): Consider quadratic probing.
 | 
| -    for (; ; probe = (probe + 1) % NumEntries()) {
 | 
| +    while (true) {
 | 
|        if (IsUnused(probe)) {
 | 
|          return -1;
 | 
| -      } else if (IsDeleted(probe)) {
 | 
| -        continue;
 | 
| -      } else {
 | 
| +      } else if (!IsDeleted(probe)) {
 | 
|          key_handle_ = GetKey(probe);
 | 
|          if (KeyTraits::IsMatch(key, key_handle_)) {
 | 
|            return probe;
 | 
|          }
 | 
|        }
 | 
| +      // Advance probe.
 | 
| +      probe++;
 | 
| +      probe = (probe == num_entries) ? 0 : probe;
 | 
|      }
 | 
|      UNREACHABLE();
 | 
|      return -1;
 | 
| @@ -177,12 +180,14 @@ class HashTable : public ValueObject {
 | 
|    //   and returns false.
 | 
|    template<typename Key>
 | 
|    bool FindKeyOrDeletedOrUnused(const Key& key, intptr_t* entry) const {
 | 
| +    const intptr_t num_entries = NumEntries();
 | 
|      ASSERT(entry != NULL);
 | 
| -    ASSERT(NumOccupied() < NumEntries());
 | 
| -    intptr_t probe = static_cast<uword>(KeyTraits::Hash(key)) % NumEntries();
 | 
| +    ASSERT(NumOccupied() < num_entries);
 | 
| +    uword hash = KeyTraits::Hash(key);
 | 
| +    intptr_t probe = hash % num_entries;
 | 
|      intptr_t deleted = -1;
 | 
|      // TODO(koda): Consider quadratic probing.
 | 
| -    for (; ; probe = (probe + 1) % NumEntries()) {
 | 
| +    while (true) {
 | 
|        if (IsUnused(probe)) {
 | 
|          *entry = (deleted != -1) ? deleted : probe;
 | 
|          return false;
 | 
| @@ -197,6 +202,9 @@ class HashTable : public ValueObject {
 | 
|            return true;
 | 
|          }
 | 
|        }
 | 
| +      // Advance probe.
 | 
| +      probe++;
 | 
| +      probe = (probe == num_entries) ? 0 : probe;
 | 
|      }
 | 
|      UNREACHABLE();
 | 
|      return false;
 | 
| 
 |