Chromium Code Reviews| Index: sdk/lib/convert/json.dart |
| diff --git a/sdk/lib/convert/json.dart b/sdk/lib/convert/json.dart |
| index fa0886d7f3b535a654ac7b02fc43bee83c73137f..7d5f929fdda5c49a8986b761637d88cd852c11a9 100644 |
| --- a/sdk/lib/convert/json.dart |
| +++ b/sdk/lib/convert/json.dart |
| @@ -693,9 +693,10 @@ abstract class _JsonStringifier { |
| return true; |
| } else if (object is Map) { |
| _checkCycle(object); |
| - writeMap(object); |
| + // writeMap can fail if keys are not all strings. |
| + var result = writeMap(object); |
|
Søren Gjesse
2015/05/26 14:54:00
result -> success
|
| _removeSeen(object); |
| - return true; |
| + return result; |
| } else { |
| return false; |
| } |
| @@ -715,17 +716,29 @@ abstract class _JsonStringifier { |
| } |
| /** Serializes a [Map]. */ |
| - void writeMap(Map<String, Object> map) { |
| + bool writeMap(Map<String, Object> map) { |
| + List keyValueList = new List(map.length * 2); |
| + int i = 0; |
| + bool allStringKeys = true; |
| + map.forEach((key, value) { |
| + if (key is! String) { |
| + allStringKeys = false; |
| + } |
| + keyValueList[i++] = key; |
| + keyValueList[i++] = value; |
| + }); |
| + if (!allStringKeys) return false; |
| writeString('{'); |
| String separator = '"'; |
| - map.forEach((String key, value) { |
| + for (int i = 0; i < keyValueList.length; i += 2) { |
| writeString(separator); |
| separator = ',"'; |
| - writeStringContent(key); |
| + writeStringContent(keyValueList[i]); |
| writeString('":'); |
| - writeObject(value); |
| - }); |
| + writeObject(keyValueList[i + 1]); |
| + } |
| writeString('}'); |
| + return true; |
| } |
| } |