Index: sdk/lib/_internal/compiler/js_lib/linked_hash_map.dart |
diff --git a/sdk/lib/_internal/compiler/js_lib/linked_hash_map.dart b/sdk/lib/_internal/compiler/js_lib/linked_hash_map.dart |
index bbf76d3b6a9432954af7865ea0dfb9f5d2f97a90..cef7f93e8ebad24119a6eb7233ff925ba32f34a3 100644 |
--- a/sdk/lib/_internal/compiler/js_lib/linked_hash_map.dart |
+++ b/sdk/lib/_internal/compiler/js_lib/linked_hash_map.dart |
@@ -44,7 +44,7 @@ class JsLinkedHashMap<K, V> implements LinkedHashMap<K, V>, InternalMap { |
/// If ES6 Maps are available returns a linked hash-map backed by an ES6 Map. |
@ForceInline() |
factory JsLinkedHashMap.es6() { |
- return (_USE_ES6_MAPS && JsLinkedHashMap._supportsEs6Maps) |
+ return (_USE_ES6_MAPS && JsLinkedHashMap._supportsEs6Maps) |
? new Es6LinkedHashMap<K, V>() |
: new JsLinkedHashMap<K, V>(); |
} |
@@ -223,9 +223,10 @@ class JsLinkedHashMap<K, V> implements LinkedHashMap<K, V>, InternalMap { |
} |
void _modified() { |
- // Value cycles after 2^30 modifications. If you keep hold of an |
- // iterator for that long, you might miss a modification |
- // detection, and iteration can go sour. Don't do that. |
+ // Value cycles after 2^30 modifications so that modification counts are |
+ // always unboxed (Smi) values. Modification detection will be missed if you |
+ // make exactly some multiple of 2^30 modifications between advances of an |
+ // iterator. |
_modifications = (_modifications + 1) & 0x3ffffff; |
} |