Chromium Code Reviews| Index: sdk/lib/collection/maps.dart |
| diff --git a/sdk/lib/collection/maps.dart b/sdk/lib/collection/maps.dart |
| index 303008cc6950a815089473c7b0f4e181b89cda13..3481122f29988f70a3b982e9d4de70d2f67a69f7 100644 |
| --- a/sdk/lib/collection/maps.dart |
| +++ b/sdk/lib/collection/maps.dart |
| @@ -59,7 +59,10 @@ class Maps { |
| static bool isEmpty(Map map) => map.keys.isEmpty; |
| static bool isNotEmpty(Map map) => map.keys.isNotEmpty; |
| - |
| + |
| + // A list to identify cyclic maps during toString() calls. |
| + static List _toStringList = new List(); |
| + |
| /** |
| * Returns a string representing the specified map. The returned string |
| * looks like this: [:'{key0: value0, key1: value1, ... keyN: valueN}':]. |
| @@ -76,7 +79,32 @@ class Maps { |
| * A typical implementation of a map's [toString] method will |
| * simply return the results of this method applied to the collection. |
| */ |
| - static String mapToString(Map m) => ToString.mapToString(m); |
| + static String mapToString(Map m) { |
| + for (int i = 0; i < _toStringList.length; i++) { |
| + if (identical(_toStringList[i], m)) { return '{...}'; } |
| + } |
| + |
| + var result = new StringBuffer(); |
| + try { |
| + _toStringList.add(m); |
| + result.write('{'); |
| + bool first = true; |
| + m.forEach((k, v) { |
| + if(!first) { |
| + result.write(', '); |
| + } |
| + first = false; |
| + result.write(k); |
| + result.write(': '); |
| + result.write(v); |
| + }); |
| + result.write('}'); |
| + } finally { |
| + _toStringList.remove(m); |
|
floitsch
2013/07/08 16:12:34
removeLast (with assert).
zarah
2013/07/08 16:57:46
Done.
|
| + } |
| + |
| + return result.toString(); |
| + } |
| static _id(x) => x; |