Index: pkg/compiler/lib/src/serialization/json_serializer.dart |
diff --git a/pkg/compiler/lib/src/serialization/json_serializer.dart b/pkg/compiler/lib/src/serialization/json_serializer.dart |
index 52e9f9604d6d82e33d714c57e9a4e877deb696e1..ba995bde28babd1f15a71b45549438c199707d20 100644 |
--- a/pkg/compiler/lib/src/serialization/json_serializer.dart |
+++ b/pkg/compiler/lib/src/serialization/json_serializer.dart |
@@ -15,8 +15,13 @@ class JsonSerializationEncoder implements SerializationEncoder { |
const JsonSerializationEncoder(); |
String encode(ObjectValue objectValue) { |
- return new JsonEncoder.withIndent(' ') |
- .convert(const JsonValueEncoder().convert(objectValue)); |
+ try { |
+ return new JsonEncoder.withIndent(' ') |
+ .convert(const JsonValueEncoder().convert(objectValue)); |
+ } on JsonUnsupportedObjectError catch (e) { |
+ throw 'Error encoding `${e.unsupportedObject}` ' |
+ '(${e.unsupportedObject.runtimeType})'; |
+ } |
} |
} |
@@ -48,7 +53,19 @@ class JsonValueEncoder implements ValueVisitor { |
visitConstant(ConstantValue value, arg) => visit(value.id); |
@override |
- double visitDouble(DoubleValue value, arg) => value.value; |
+ visitDouble(DoubleValue value, arg) { |
+ double d = value.value; |
+ if (d.isNaN) { |
+ return 'NaN'; |
+ } else if (d.isInfinite) { |
+ if (d.isNegative) { |
+ return '-Infinity'; |
+ } else { |
+ return 'Infinity'; |
+ } |
+ } |
+ return d; |
+ } |
@override |
visitElement(ElementValue value, arg) => visit(value.id); |