Ensure that YAML maps' map keys are order-independent.

R=jmesserly@google.com
BUG=

Review URL: https://codereview.chromium.org//297753003

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart/pkg/yaml@36399 260f80e4-7a28-3924-810f-c04153c831b5
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 695e069..7d1fafd 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.9.0+2
+
+* Ensure that maps are order-independent when used as map keys.
+
 ## 0.9.0+1
 
 * The `YamlMap` class is deprecated. In a future version, maps returned by
diff --git a/lib/src/utils.dart b/lib/src/utils.dart
index 64cad47..463af70 100644
--- a/lib/src/utils.dart
+++ b/lib/src/utils.dart
@@ -20,7 +20,9 @@
     parents.add(value);
     try {
       if (value is Map) {
-        return _hashCodeFor(value.keys) ^ _hashCodeFor(value.values);
+        var equality = const UnorderedIterableEquality();
+        return equality.hash(value.keys.map(_hashCodeFor)) ^
+            equality.hash(value.values.map(_hashCodeFor));
       } else if (value is Iterable) {
         return const IterableEquality().hash(value.map(hashCodeFor));
       }
diff --git a/pubspec.yaml b/pubspec.yaml
index c3eacd7..7186de0 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,5 +1,5 @@
 name: yaml
-version: 0.9.0+1
+version: 0.9.0+2
 author: "Dart Team <misc@dartlang.org>"
 homepage: http://www.dartlang.org
 description: A parser for YAML.