| Index: runtime/vm/hash_map.h
 | 
| ===================================================================
 | 
| --- runtime/vm/hash_map.h	(revision 11221)
 | 
| +++ runtime/vm/hash_map.h	(working copy)
 | 
| @@ -20,6 +20,8 @@
 | 
|      Resize(kInitialSize);
 | 
|    }
 | 
|  
 | 
| +  DirectChainedHashMap(const DirectChainedHashMap& other);
 | 
| +
 | 
|    void Insert(T value);
 | 
|  
 | 
|    T Lookup(T value) const;
 | 
| @@ -48,8 +50,6 @@
 | 
|    // with a given hash.  Colliding elements are stored in linked lists.
 | 
|    HashMapListElement* lists_;  // The linked lists containing hash collisions.
 | 
|    intptr_t free_list_head_;  // Unused elements in lists_ are on the free list.
 | 
| -
 | 
| -  DISALLOW_COPY_AND_ASSIGN(DirectChainedHashMap);
 | 
|  };
 | 
|  
 | 
|  
 | 
| @@ -70,6 +70,21 @@
 | 
|  
 | 
|  
 | 
|  template <typename T>
 | 
| +DirectChainedHashMap<T>::DirectChainedHashMap(const DirectChainedHashMap& other)
 | 
| +  : array_size_(other.array_size_),
 | 
| +    lists_size_(other.lists_size_),
 | 
| +    count_(other.count_),
 | 
| +    array_(Isolate::Current()->current_zone()->
 | 
| +           Alloc<HashMapListElement>(other.array_size_)),
 | 
| +    lists_(Isolate::Current()->current_zone()->
 | 
| +           Alloc<HashMapListElement>(other.lists_size_)),
 | 
| +    free_list_head_(other.free_list_head_) {
 | 
| +  memmove(array_, other.array_, array_size_ * sizeof(HashMapListElement));
 | 
| +  memmove(lists_, other.lists_, lists_size_ * sizeof(HashMapListElement));
 | 
| +}
 | 
| +
 | 
| +
 | 
| +template <typename T>
 | 
|  void DirectChainedHashMap<T>::Resize(intptr_t new_size) {
 | 
|    ASSERT(new_size > count_);
 | 
|    // Hashing the values into the new array has no more collisions than in the
 | 
| 
 |