| Index: runtime/lib/object_patch.dart
|
| diff --git a/runtime/lib/object_patch.dart b/runtime/lib/object_patch.dart
|
| index 4c429e42bc92fcd406c711357b2b04bafcd30b08..35ccc5884901d9a82d2475a3e20fc9644993ae27 100644
|
| --- a/runtime/lib/object_patch.dart
|
| +++ b/runtime/lib/object_patch.dart
|
| @@ -2,9 +2,6 @@
|
| // for details. All rights reserved. Use of this source code is governed by a
|
| // BSD-style license that can be found in the LICENSE file.
|
|
|
| -int _getHash(obj) native "Object_getHash";
|
| -int _setHash(obj, hash) native "Object_setHash";
|
| -
|
| @patch
|
| class Object {
|
| // The VM has its own implementation of equals.
|
| @@ -12,18 +9,22 @@ class Object {
|
| bool operator ==(other) native "Object_equals";
|
|
|
| // Helpers used to implement hashCode. If a hashCode is used, we remember it
|
| - // in a weak table in the VM (32 bit) or in the header of the object (64
|
| - // bit). A new hashCode value is calculated using a random number generator.
|
| + // in a weak table in the VM. A new hashCode value is calculated using a
|
| + // number generator.
|
| static final _hashCodeRnd = new Random();
|
|
|
| // Shared static implementation for hashCode and _identityHashCode.
|
| + static _getHash(obj) native "Object_getHash";
|
| + static _setHash(obj, hash) native "Object_setHash";
|
| +
|
| static int _objectHashCode(obj) {
|
| var result = _getHash(obj);
|
| if (result == 0) {
|
| // We want the hash to be a Smi value greater than 0.
|
| - do {
|
| + result = _hashCodeRnd.nextInt(0x40000000);
|
| + while (result == 0) {
|
| result = _hashCodeRnd.nextInt(0x40000000);
|
| - } while (result == 0);
|
| + }
|
| _setHash(obj, result);
|
| }
|
| return result;
|
|
|