Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(636)

Side by Side Diff: pkg/compiler/lib/src/serialization/json_serializer.dart

Issue 2250643002: Support encoding of NaN, infinity and negative infinity. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | pkg/compiler/lib/src/serialization/serialization.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library dart2js.serialization.json; 5 library dart2js.serialization.json;
6 6
7 import 'dart:convert'; 7 import 'dart:convert';
8 8
9 import 'keys.dart'; 9 import 'keys.dart';
10 import 'serialization.dart'; 10 import 'serialization.dart';
11 import 'values.dart'; 11 import 'values.dart';
12 12
13 /// Serialization encoder for JSON. 13 /// Serialization encoder for JSON.
14 class JsonSerializationEncoder implements SerializationEncoder { 14 class JsonSerializationEncoder implements SerializationEncoder {
15 const JsonSerializationEncoder(); 15 const JsonSerializationEncoder();
16 16
17 String encode(ObjectValue objectValue) { 17 String encode(ObjectValue objectValue) {
18 return new JsonEncoder.withIndent(' ') 18 try {
19 .convert(const JsonValueEncoder().convert(objectValue)); 19 return new JsonEncoder.withIndent(' ')
20 .convert(const JsonValueEncoder().convert(objectValue));
21 } on JsonUnsupportedObjectError catch (e) {
22 throw 'Error encoding `${e.unsupportedObject}` '
23 '(${e.unsupportedObject.runtimeType})';
24 }
20 } 25 }
21 } 26 }
22 27
23 /// Serialization decoder for JSON. 28 /// Serialization decoder for JSON.
24 class JsonSerializationDecoder implements SerializationDecoder { 29 class JsonSerializationDecoder implements SerializationDecoder {
25 const JsonSerializationDecoder(); 30 const JsonSerializationDecoder();
26 31
27 Map decode(String text) => JSON.decode(text); 32 Map decode(String text) => JSON.decode(text);
28 33
29 /// Returns the name of the [key] which used for to store a [Key] into a 34 /// Returns the name of the [key] which used for to store a [Key] into a
(...skipping 11 matching lines...) Expand all
41 @override 46 @override
42 visit(Value value, [arg]) => value.accept(this, arg); 47 visit(Value value, [arg]) => value.accept(this, arg);
43 48
44 @override 49 @override
45 bool visitBool(BoolValue value, arg) => value.value; 50 bool visitBool(BoolValue value, arg) => value.value;
46 51
47 @override 52 @override
48 visitConstant(ConstantValue value, arg) => visit(value.id); 53 visitConstant(ConstantValue value, arg) => visit(value.id);
49 54
50 @override 55 @override
51 double visitDouble(DoubleValue value, arg) => value.value; 56 visitDouble(DoubleValue value, arg) {
57 double d = value.value;
58 if (d.isNaN) {
59 return 'NaN';
60 } else if (d.isInfinite) {
61 if (d.isNegative) {
62 return '-Infinity';
63 } else {
64 return 'Infinity';
65 }
66 }
67 return d;
68 }
52 69
53 @override 70 @override
54 visitElement(ElementValue value, arg) => visit(value.id); 71 visitElement(ElementValue value, arg) => visit(value.id);
55 72
56 @override 73 @override
57 visitEnum(EnumValue value, arg) => value.value.index; 74 visitEnum(EnumValue value, arg) => value.value.index;
58 75
59 @override 76 @override
60 int visitInt(IntValue value, arg) => value.value; 77 int visitInt(IntValue value, arg) => value.value;
61 78
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
205 @override 222 @override
206 void visitType(TypeValue value, String indentation) { 223 void visitType(TypeValue value, String indentation) {
207 buffer.write('Type(${value.id}):${value.type}'); 224 buffer.write('Type(${value.id}):${value.type}');
208 } 225 }
209 226
210 @override 227 @override
211 void visitUri(UriValue value, String indentation) { 228 void visitUri(UriValue value, String indentation) {
212 buffer.write('Uri(${value.value})'); 229 buffer.write('Uri(${value.value})');
213 } 230 }
214 } 231 }
OLDNEW
« no previous file with comments | « no previous file | pkg/compiler/lib/src/serialization/serialization.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698