| OLD | NEW |
| 1 part of dart.convert; | 1 part of dart.convert; |
| 2 | 2 class JsonUnsupportedObjectError extends Error {final unsupportedObject; |
| 3 class JsonUnsupportedObjectError extends Error { | 3 final cause; |
| 4 final unsupportedObject; | 4 JsonUnsupportedObjectError(this.unsupportedObject, { |
| 5 final cause; | 5 this.cause} |
| 6 JsonUnsupportedObjectError(this.unsupportedObject, {this.cause}); | 6 ); |
| 7 String toString() { | 7 String toString() { |
| 8 if (cause != null) { | 8 if (cause != null) { |
| 9 return "Converting object to an encodable object failed."; | 9 return "Converting object to an encodable object failed."; |
| 10 } else { | 10 } |
| 11 return "Converting object did not return an encodable object."; | 11 else { |
| 12 return "Converting object did not return an encodable object."; |
| 12 } | 13 } |
| 13 } | 14 } |
| 14 } | 15 } |
| 15 class JsonCyclicError extends JsonUnsupportedObjectError { | 16 class JsonCyclicError extends JsonUnsupportedObjectError {JsonCyclicError(Objec
t object) : super(object); |
| 16 JsonCyclicError(Object object) : super(object); | 17 String toString() => "Cyclic error in JSON stringify"; |
| 17 String toString() => "Cyclic error in JSON stringify"; | 18 } |
| 18 } | 19 const JsonCodec JSON = const JsonCodec(); |
| 19 const JsonCodec JSON = const JsonCodec(); | 20 typedef _Reviver(var key, var value); |
| 20 typedef _Reviver(var key, var value); | 21 typedef _ToEncodable(var o); |
| 21 typedef _ToEncodable(var o); | 22 class JsonCodec extends Codec<Object, String> {final _Reviver _reviver; |
| 22 class JsonCodec extends Codec<Object, String> { | 23 final _ToEncodable _toEncodable; |
| 23 final _Reviver _reviver; | 24 const JsonCodec({ |
| 24 final _ToEncodable _toEncodable; | 25 reviver(var key, var value), toEncodable(var object)} |
| 25 const JsonCodec({reviver(var key, var value), toEncodable(var object)}) | 26 ) : _reviver = reviver, _toEncodable = toEncodable; |
| 26 : _reviver = reviver, | 27 JsonCodec.withReviver(reviver(var key, var value)) : this(reviver: reviver); |
| 27 _toEncodable = toEncodable; | 28 dynamic decode(String source, { |
| 28 JsonCodec.withReviver(reviver(var key, var value)) : this(reviver: reviver); | 29 reviver(var key, var value)} |
| 29 dynamic decode(String source, {reviver(var key, var value)}) { | 30 ) { |
| 30 if (reviver == null) reviver = _reviver; | 31 if (reviver == null) reviver = _reviver; |
| 31 if (reviver == null) return decoder.convert(source); | 32 if (reviver == null) return decoder.convert(source); |
| 32 return new JsonDecoder(reviver).convert(source); | 33 return new JsonDecoder(reviver).convert(source); |
| 33 } | 34 } |
| 34 String encode(Object value, {toEncodable(var object)}) { | 35 String encode(Object value, { |
| 35 if (toEncodable == null) toEncodable = _toEncodable; | 36 toEncodable(var object)} |
| 36 if (toEncodable == null) return encoder.convert(value); | 37 ) { |
| 37 return new JsonEncoder(toEncodable).convert(value); | 38 if (toEncodable == null) toEncodable = _toEncodable; |
| 38 } | 39 if (toEncodable == null) return encoder.convert(value); |
| 39 JsonEncoder get encoder { | 40 return new JsonEncoder(toEncodable).convert(value); |
| 40 if (_toEncodable == null) return const JsonEncoder(); | 41 } |
| 41 return new JsonEncoder(_toEncodable); | 42 JsonEncoder get encoder { |
| 42 } | 43 if (_toEncodable == null) return const JsonEncoder(); |
| 43 JsonDecoder get decoder { | 44 return new JsonEncoder(_toEncodable); |
| 44 if (_reviver == null) return const JsonDecoder(); | 45 } |
| 45 return new JsonDecoder(_reviver); | 46 JsonDecoder get decoder { |
| 46 } | 47 if (_reviver == null) return const JsonDecoder(); |
| 47 } | 48 return new JsonDecoder(_reviver); |
| 48 class JsonEncoder extends Converter<Object, String> { | 49 } |
| 49 final String indent; | 50 } |
| 50 final Function _toEncodable; | 51 class JsonEncoder extends Converter<Object, String> {final String indent; |
| 51 const JsonEncoder([Object toEncodable(Object nonSerializable)]) | 52 final Function _toEncodable; |
| 52 : this.indent = null, | 53 const JsonEncoder([Object toEncodable(Object nonSerializable)]) : this.indent =
null, this._toEncodable = toEncodable; |
| 53 this._toEncodable = toEncodable; | 54 const JsonEncoder.withIndent(this.indent, [Object toEncodable(Object nonSeriali
zable)]) : this._toEncodable = toEncodable; |
| 54 const JsonEncoder.withIndent(this.indent, | 55 String convert(Object object) => _JsonStringStringifier.stringify(object, DDC$R
T.cast(_toEncodable, Function, __t7, "CastGeneral", """line 243, column 48 of da
rt:convert/json.dart: """, _toEncodable is __t7, false), indent); |
| 55 [Object toEncodable(Object nonSerializable)]) | 56 ChunkedConversionSink<Object> startChunkedConversion(Sink<String> sink) { |
| 56 : this._toEncodable = toEncodable; | 57 if (sink is! StringConversionSink) { |
| 57 String convert(Object object) => _JsonStringStringifier.stringify(object, | 58 sink = new StringConversionSink.from(sink); |
| 58 DDC$RT.cast(_toEncodable, Function, __t7, "CastGeneral", | 59 } |
| 59 """line 243, column 48 of dart:convert/json.dart: """, | 60 else if (sink is _Utf8EncoderSink) { |
| 60 _toEncodable is __t7, false), indent); | 61 return new _JsonUtf8EncoderSink(sink._sink, _toEncodable, JsonUtf8Encoder._utf8E
ncode(indent), JsonUtf8Encoder.DEFAULT_BUFFER_SIZE); |
| 61 ChunkedConversionSink<Object> startChunkedConversion(Sink<String> sink) { | 62 } |
| 62 if (sink is! StringConversionSink) { | 63 return new _JsonEncoderSink(sink, _toEncodable, indent); |
| 63 sink = new StringConversionSink.from(sink); | 64 } |
| 64 } else if (sink is _Utf8EncoderSink) { | 65 Stream<String> bind(Stream<Object> stream) => ((__x9) => DDC$RT.cast(__x9, DDC$
RT.type((DDC$async$.Stream<dynamic> _) { |
| 65 return new _JsonUtf8EncoderSink(sink._sink, _toEncodable, | 66 } |
| 66 JsonUtf8Encoder._utf8Encode(indent), | 67 ), DDC$RT.type((DDC$async$.Stream<String> _) { |
| 67 JsonUtf8Encoder.DEFAULT_BUFFER_SIZE); | 68 } |
| 68 } | 69 ), "CastDynamic", """line 266, column 49 of dart:convert/json.dart: """, __x9 is
DDC$async$.Stream<String>, false))(super.bind(stream)); |
| 69 return new _JsonEncoderSink(sink, _toEncodable, indent); | 70 Converter<Object, dynamic> fuse(Converter<String, dynamic> other) { |
| 70 } | 71 if (other is Utf8Encoder) { |
| 71 Stream<String> bind(Stream<Object> stream) => ((__x9) => DDC$RT.cast(__x9, | 72 return new JsonUtf8Encoder(indent, _toEncodable); |
| 72 DDC$RT.type((DDC$async$.Stream<dynamic> _) {}), | 73 } |
| 73 DDC$RT.type((DDC$async$.Stream<String> _) {}), "CastDynamic", | 74 return super.fuse(other); |
| 74 """line 266, column 49 of dart:convert/json.dart: """, | 75 } |
| 75 __x9 is DDC$async$.Stream<String>, false))(super.bind(stream)); | 76 } |
| 76 Converter<Object, dynamic> fuse(Converter<String, dynamic> other) { | 77 class JsonUtf8Encoder extends Converter<Object, List<int>> {static const int DE
FAULT_BUFFER_SIZE = 256; |
| 77 if (other is Utf8Encoder) { | 78 final List<int> _indent; |
| 78 return new JsonUtf8Encoder(indent, _toEncodable); | 79 final Function _toEncodable; |
| 79 } | 80 final int _bufferSize; |
| 80 return super.fuse(other); | 81 JsonUtf8Encoder([String indent, toEncodable(Object object), int bufferSize = DE
FAULT_BUFFER_SIZE]) : _indent = _utf8Encode(indent), _toEncodable = toEncodable,
_bufferSize = bufferSize; |
| 81 } | 82 static List<int> _utf8Encode(String string) { |
| 82 } | 83 if (string == null) return null; |
| 83 class JsonUtf8Encoder extends Converter<Object, List<int>> { | 84 if (string.isEmpty) return new Uint8List(0); |
| 84 static const int DEFAULT_BUFFER_SIZE = 256; | 85 checkAscii: { |
| 85 final List<int> _indent; | 86 for (int i = 0; |
| 86 final Function _toEncodable; | 87 i < string.length; |
| 87 final int _bufferSize; | 88 i++) { |
| 88 JsonUtf8Encoder([String indent, toEncodable(Object object), | 89 if (string.codeUnitAt(i) >= 0x80) break checkAscii; |
| 89 int bufferSize = DEFAULT_BUFFER_SIZE]) | 90 } |
| 90 : _indent = _utf8Encode(indent), | 91 return string.codeUnits; |
| 91 _toEncodable = toEncodable, | 92 } |
| 92 _bufferSize = bufferSize; | 93 return UTF8.encode(string); |
| 93 static List<int> _utf8Encode(String string) { | 94 } |
| 94 if (string == null) return null; | 95 List<int> convert(Object object) { |
| 95 if (string.isEmpty) return new Uint8List(0); | 96 List<List<int>> bytes = ((__x10) => DDC$RT.cast(__x10, DDC$RT.type((List<dynamic
> _) { |
| 96 checkAscii: { | 97 } |
| 97 for (int i = 0; i < string.length; i++) { | 98 ), DDC$RT.type((List<List<int>> _) { |
| 98 if (string.codeUnitAt(i) >= 0x80) break checkAscii; | 99 } |
| 99 } | 100 ), "CastLiteral", """line 338, column 29 of dart:convert/json.dart: """, __x10 i
s List<List<int>>, false))([]); |
| 100 return string.codeUnits; | 101 void addChunk(Uint8List chunk, int start, int end) { |
| 101 } | 102 if (start > 0 || end < chunk.length) { |
| 102 return UTF8.encode(string); | 103 int length = end - start; |
| 103 } | 104 chunk = new Uint8List.view(chunk.buffer, chunk.offsetInBytes + start, length); |
| 104 List<int> convert(Object object) { | 105 } |
| 105 List<List<int>> bytes = ((__x10) => DDC$RT.cast(__x10, | 106 bytes.add(chunk); |
| 106 DDC$RT.type((List<dynamic> _) {}), DDC$RT.type((List<List<int>> _) {}), | 107 } |
| 107 "CastLiteral", """line 338, column 29 of dart:convert/json.dart: """, | 108 _JsonUtf8Stringifier.stringify(object, _indent, DDC$RT.cast(_toEncodable, Funct
ion, __t11, "CastGeneral", """line 352, column 36 of dart:convert/json.dart: """
, _toEncodable is __t11, false), _bufferSize, addChunk); |
| 108 __x10 is List<List<int>>, false))([]); | 109 if (bytes.length == 1) return bytes[0]; |
| 109 void addChunk(Uint8List chunk, int start, int end) { | 110 int length = 0; |
| 110 if (start > 0 || end < chunk.length) { | 111 for (int i = 0; |
| 111 int length = end - start; | 112 i < bytes.length; |
| 112 chunk = new Uint8List.view( | 113 i++) { |
| 113 chunk.buffer, chunk.offsetInBytes + start, length); | 114 length += bytes[i].length; |
| 114 } | 115 } |
| 115 bytes.add(chunk); | 116 Uint8List result = new Uint8List(length); |
| 116 } | 117 for (int i = 0, offset = 0; |
| 117 _JsonUtf8Stringifier.stringify(object, _indent, DDC$RT.cast(_toEncodable, | 118 i < bytes.length; |
| 118 Function, __t11, "CastGeneral", | 119 i++) { |
| 119 """line 352, column 36 of dart:convert/json.dart: """, | 120 var byteList = bytes[i]; |
| 120 _toEncodable is __t11, false), _bufferSize, addChunk); | 121 int end = offset + byteList.length; |
| 121 if (bytes.length == 1) return bytes[0]; | 122 result.setRange(offset, end, byteList); |
| 122 int length = 0; | 123 offset = end; |
| 123 for (int i = 0; i < bytes.length; i++) { | 124 } |
| 124 length += bytes[i].length; | 125 return result; |
| 125 } | 126 } |
| 126 Uint8List result = new Uint8List(length); | 127 ChunkedConversionSink<Object> startChunkedConversion(Sink<List<int>> sink) { |
| 127 for (int i = 0, offset = 0; i < bytes.length; i++) { | 128 ByteConversionSink byteSink; |
| 128 var byteList = bytes[i]; | 129 if (sink is ByteConversionSink) { |
| 129 int end = offset + byteList.length; | 130 byteSink = sink; |
| 130 result.setRange(offset, end, byteList); | 131 } |
| 131 offset = end; | 132 else { |
| 132 } | 133 byteSink = new ByteConversionSink.from(sink); |
| 133 return result; | 134 } |
| 134 } | 135 return new _JsonUtf8EncoderSink(byteSink, _toEncodable, _indent, _bufferSize); |
| 135 ChunkedConversionSink<Object> startChunkedConversion(Sink<List<int>> sink) { | 136 } |
| 136 ByteConversionSink byteSink; | 137 Stream<List<int>> bind(Stream<Object> stream) { |
| 137 if (sink is ByteConversionSink) { | 138 return ((__x13) => DDC$RT.cast(__x13, DDC$RT.type((DDC$async$.Stream<dynamic> _)
{ |
| 138 byteSink = sink; | 139 } |
| 139 } else { | 140 ), DDC$RT.type((DDC$async$.Stream<List<int>> _) { |
| 140 byteSink = new ByteConversionSink.from(sink); | 141 } |
| 141 } | 142 ), "CastDynamic", """line 391, column 12 of dart:convert/json.dart: """, __x13 i
s DDC$async$.Stream<List<int>>, false))(super.bind(stream)); |
| 142 return new _JsonUtf8EncoderSink( | 143 } |
| 143 byteSink, _toEncodable, _indent, _bufferSize); | 144 Converter<Object, dynamic> fuse(Converter<List<int>, dynamic> other) { |
| 144 } | 145 return super.fuse(other); |
| 145 Stream<List<int>> bind(Stream<Object> stream) { | 146 } |
| 146 return ((__x13) => DDC$RT.cast(__x13, | 147 } |
| 147 DDC$RT.type((DDC$async$.Stream<dynamic> _) {}), | 148 class _JsonEncoderSink extends ChunkedConversionSink<Object> {final String _ind
ent; |
| 148 DDC$RT.type((DDC$async$.Stream<List<int>> _) {}), "CastDynamic", | 149 final Function _toEncodable; |
| 149 """line 391, column 12 of dart:convert/json.dart: """, | 150 final StringConversionSink _sink; |
| 150 __x13 is DDC$async$.Stream<List<int>>, false))(super.bind(stream)); | 151 bool _isDone = false; |
| 151 } | 152 _JsonEncoderSink(this._sink, this._toEncodable, this._indent); |
| 152 Converter<Object, dynamic> fuse(Converter<List<int>, dynamic> other) { | 153 void add(Object o) { |
| 153 return super.fuse(other); | 154 if (_isDone) { |
| 154 } | 155 throw new StateError("Only one call to add allowed"); |
| 155 } | 156 } |
| 156 class _JsonEncoderSink extends ChunkedConversionSink<Object> { | 157 _isDone = true; |
| 157 final String _indent; | 158 ClosableStringSink stringSink = _sink.asStringSink(); |
| 158 final Function _toEncodable; | 159 _JsonStringStringifier.printOn(o, stringSink, DDC$RT.cast(_toEncodable, Functio
n, __t7, "CastGeneral", """line 425, column 51 of dart:convert/json.dart: """, _
toEncodable is __t7, false), _indent); |
| 159 final StringConversionSink _sink; | 160 stringSink.close(); |
| 160 bool _isDone = false; | 161 } |
| 161 _JsonEncoderSink(this._sink, this._toEncodable, this._indent); | 162 void close() { |
| 162 void add(Object o) { | 163 } |
| 163 if (_isDone) { | 164 } |
| 164 throw new StateError("Only one call to add allowed"); | 165 class _JsonUtf8EncoderSink extends ChunkedConversionSink<Object> {final ByteCon
versionSink _sink; |
| 165 } | 166 final List<int> _indent; |
| 166 _isDone = true; | 167 final Function _toEncodable; |
| 167 ClosableStringSink stringSink = _sink.asStringSink(); | 168 final int _bufferSize; |
| 168 _JsonStringStringifier.printOn(o, stringSink, DDC$RT.cast(_toEncodable, | 169 bool _isDone = false; |
| 169 Function, __t7, "CastGeneral", | 170 _JsonUtf8EncoderSink(this._sink, this._toEncodable, this._indent, this._bufferS
ize); |
| 170 """line 425, column 51 of dart:convert/json.dart: """, | 171 void _addChunk(Uint8List chunk, int start, int end) { |
| 171 _toEncodable is __t7, false), _indent); | 172 _sink.addSlice(chunk, start, end, false); |
| 172 stringSink.close(); | 173 } |
| 173 } | 174 void add(Object object) { |
| 174 void close() {} | 175 if (_isDone) { |
| 175 } | 176 throw new StateError("Only one call to add allowed"); |
| 176 class _JsonUtf8EncoderSink extends ChunkedConversionSink<Object> { | 177 } |
| 177 final ByteConversionSink _sink; | 178 _isDone = true; |
| 178 final List<int> _indent; | 179 _JsonUtf8Stringifier.stringify(object, _indent, DDC$RT.cast(_toEncodable, Funct
ion, __t11, "CastGeneral", """line 455, column 53 of dart:convert/json.dart: """
, _toEncodable is __t11, false), _bufferSize, _addChunk); |
| 179 final Function _toEncodable; | 180 _sink.close(); |
| 180 final int _bufferSize; | 181 } |
| 181 bool _isDone = false; | 182 void close() { |
| 182 _JsonUtf8EncoderSink( | 183 if (!_isDone) { |
| 183 this._sink, this._toEncodable, this._indent, this._bufferSize); | 184 _isDone = true; |
| 184 void _addChunk(Uint8List chunk, int start, int end) { | 185 _sink.close(); |
| 185 _sink.addSlice(chunk, start, end, false); | 186 } |
| 186 } | 187 } |
| 187 void add(Object object) { | 188 } |
| 188 if (_isDone) { | 189 class JsonDecoder extends Converter<String, Object> {final _Reviver _reviver; |
| 189 throw new StateError("Only one call to add allowed"); | 190 const JsonDecoder([reviver(var key, var value)]) : this._reviver = reviver; |
| 190 } | 191 dynamic convert(String input) => _parseJson(input, _reviver); |
| 191 _isDone = true; | 192 StringConversionSink startChunkedConversion(Sink<Object> sink) { |
| 192 _JsonUtf8Stringifier.stringify(object, _indent, DDC$RT.cast(_toEncodable, | 193 return new _JsonDecoderSink(_reviver, sink); |
| 193 Function, __t11, "CastGeneral", | 194 } |
| 194 """line 455, column 53 of dart:convert/json.dart: """, | 195 Stream<Object> bind(Stream<String> stream) => ((__x14) => DDC$RT.cast(__x14, DD
C$RT.type((DDC$async$.Stream<dynamic> _) { |
| 195 _toEncodable is __t11, false), _bufferSize, _addChunk); | 196 } |
| 196 _sink.close(); | 197 ), DDC$RT.type((DDC$async$.Stream<Object> _) { |
| 197 } | 198 } |
| 198 void close() { | 199 ), "CastDynamic", """line 509, column 49 of dart:convert/json.dart: """, __x14 i
s DDC$async$.Stream<Object>, false))(super.bind(stream)); |
| 199 if (!_isDone) { | 200 } |
| 200 _isDone = true; | 201 _parseJson(String source, reviver(key, value)) { |
| 201 _sink.close(); | 202 if (source is! String) throw new ArgumentError(source); |
| 202 } | 203 var parsed; |
| 203 } | 204 try { |
| 204 } | 205 parsed = JS('=Object|JSExtendableArray|Null|bool|num|String', 'JSON.parse(#)', s
ource); |
| 205 class JsonDecoder extends Converter<String, Object> { | 206 } |
| 206 final _Reviver _reviver; | 207 catch (e) { |
| 207 const JsonDecoder([reviver(var key, var value)]) : this._reviver = reviver; | 208 throw new FormatException(JS('String', 'String(#)', e)); |
| 208 dynamic convert(String input) => _parseJson(input, _reviver); | 209 } |
| 209 StringConversionSink startChunkedConversion(Sink<Object> sink) { | 210 if (reviver == null) { |
| 210 return new _JsonDecoderSink(_reviver, sink); | 211 return _convertJsonToDartLazy(parsed); |
| 211 } | 212 } |
| 212 Stream<Object> bind(Stream<String> stream) => ((__x14) => DDC$RT.cast(__x14, | 213 else { |
| 213 DDC$RT.type((DDC$async$.Stream<dynamic> _) {}), | 214 return _convertJsonToDart(parsed, reviver); |
| 214 DDC$RT.type((DDC$async$.Stream<Object> _) {}), "CastDynamic", | 215 } |
| 215 """line 509, column 49 of dart:convert/json.dart: """, | 216 } |
| 216 __x14 is DDC$async$.Stream<Object>, false))(super.bind(stream)); | 217 Object _defaultToEncodable(object) => object.toJson(); |
| 217 } | 218 abstract class _JsonStringifier {static const int BACKSPACE = 0x08; |
| 218 _parseJson(String source, reviver(key, value)) { | 219 static const int TAB = 0x09; |
| 219 if (source is! String) throw new ArgumentError(source); | 220 static const int NEWLINE = 0x0a; |
| 220 var parsed; | 221 static const int CARRIAGE_RETURN = 0x0d; |
| 221 try { | 222 static const int FORM_FEED = 0x0c; |
| 222 parsed = JS('=Object|JSExtendableArray|Null|bool|num|String', | 223 static const int QUOTE = 0x22; |
| 223 'JSON.parse(#)', source); | 224 static const int CHAR_0 = 0x30; |
| 224 } catch (e) { | 225 static const int BACKSLASH = 0x5c; |
| 225 throw new FormatException(JS('String', 'String(#)', e)); | 226 static const int CHAR_b = 0x62; |
| 226 } | 227 static const int CHAR_f = 0x66; |
| 227 if (reviver == null) { | 228 static const int CHAR_n = 0x6e; |
| 228 return _convertJsonToDartLazy(parsed); | 229 static const int CHAR_r = 0x72; |
| 229 } else { | 230 static const int CHAR_t = 0x74; |
| 230 return _convertJsonToDart(parsed, reviver); | 231 static const int CHAR_u = 0x75; |
| 231 } | 232 final List _seen = new List(); |
| 232 } | 233 final Function _toEncodable; |
| 233 Object _defaultToEncodable(object) => object.toJson(); | 234 _JsonStringifier(Object _toEncodable(Object o)) : _toEncodable = (_toEncodable
!= null) ? _toEncodable : _defaultToEncodable; |
| 234 abstract class _JsonStringifier { | 235 void writeString(String characters); |
| 235 static const int BACKSPACE = 0x08; | 236 void writeStringSlice(String characters, int start, int end); |
| 236 static const int TAB = 0x09; | 237 void writeCharCode(int charCode); |
| 237 static const int NEWLINE = 0x0a; | 238 void writeNumber(num number); |
| 238 static const int CARRIAGE_RETURN = 0x0d; | 239 static int hexDigit(int x) => x < 10 ? 48 + x : 87 + x; |
| 239 static const int FORM_FEED = 0x0c; | 240 void writeStringContent(String s) { |
| 240 static const int QUOTE = 0x22; | 241 int offset = 0; |
| 241 static const int CHAR_0 = 0x30; | 242 final int length = s.length; |
| 242 static const int BACKSLASH = 0x5c; | 243 for (int i = 0; |
| 243 static const int CHAR_b = 0x62; | 244 i < length; |
| 244 static const int CHAR_f = 0x66; | 245 i++) { |
| 245 static const int CHAR_n = 0x6e; | 246 int charCode = s.codeUnitAt(i); |
| 246 static const int CHAR_r = 0x72; | 247 if (charCode > BACKSLASH) continue; |
| 247 static const int CHAR_t = 0x74; | 248 if (charCode < 32) { |
| 248 static const int CHAR_u = 0x75; | 249 if (i > offset) writeStringSlice(s, offset, i); |
| 249 final List _seen = new List(); | 250 offset = i + 1; |
| 250 final Function _toEncodable; | 251 writeCharCode(BACKSLASH); |
| 251 _JsonStringifier(Object _toEncodable(Object o)) | 252 switch (charCode) {case BACKSPACE: writeCharCode(CHAR_b); |
| 252 : _toEncodable = (_toEncodable != null) | 253 break; |
| 253 ? _toEncodable | 254 case TAB: writeCharCode(CHAR_t); |
| 254 : _defaultToEncodable; | 255 break; |
| 255 void writeString(String characters); | 256 case NEWLINE: writeCharCode(CHAR_n); |
| 256 void writeStringSlice(String characters, int start, int end); | 257 break; |
| 257 void writeCharCode(int charCode); | 258 case FORM_FEED: writeCharCode(CHAR_f); |
| 258 void writeNumber(num number); | 259 break; |
| 259 static int hexDigit(int x) => x < 10 ? 48 + x : 87 + x; | 260 case CARRIAGE_RETURN: writeCharCode(CHAR_r); |
| 260 void writeStringContent(String s) { | 261 break; |
| 261 int offset = 0; | 262 default: writeCharCode(CHAR_u); |
| 262 final int length = s.length; | 263 writeCharCode(CHAR_0); |
| 263 for (int i = 0; i < length; i++) { | 264 writeCharCode(CHAR_0); |
| 264 int charCode = s.codeUnitAt(i); | 265 writeCharCode(hexDigit((charCode >> 4) & 0xf)); |
| 265 if (charCode > BACKSLASH) continue; | 266 writeCharCode(hexDigit(charCode & 0xf)); |
| 266 if (charCode < 32) { | 267 break; |
| 267 if (i > offset) writeStringSlice(s, offset, i); | 268 } |
| 268 offset = i + 1; | 269 } |
| 269 writeCharCode(BACKSLASH); | 270 else if (charCode == QUOTE || charCode == BACKSLASH) { |
| 270 switch (charCode) { | 271 if (i > offset) writeStringSlice(s, offset, i); |
| 271 case BACKSPACE: | 272 offset = i + 1; |
| 272 writeCharCode(CHAR_b); | 273 writeCharCode(BACKSLASH); |
| 273 break; | 274 writeCharCode(charCode); |
| 274 case TAB: | 275 } |
| 275 writeCharCode(CHAR_t); | 276 } |
| 276 break; | 277 if (offset == 0) { |
| 277 case NEWLINE: | 278 writeString(s); |
| 278 writeCharCode(CHAR_n); | 279 } |
| 279 break; | 280 else if (offset < length) { |
| 280 case FORM_FEED: | 281 writeStringSlice(s, offset, length); |
| 281 writeCharCode(CHAR_f); | 282 } |
| 282 break; | 283 } |
| 283 case CARRIAGE_RETURN: | 284 void _checkCycle(object) { |
| 284 writeCharCode(CHAR_r); | 285 for (int i = 0; |
| 285 break; | 286 i < _seen.length; |
| 286 default: | 287 i++) { |
| 287 writeCharCode(CHAR_u); | 288 if (identical(object, _seen[i])) { |
| 288 writeCharCode(CHAR_0); | 289 throw new JsonCyclicError(object); |
| 289 writeCharCode(CHAR_0); | 290 } |
| 290 writeCharCode(hexDigit((charCode >> 4) & 0xf)); | 291 } |
| 291 writeCharCode(hexDigit(charCode & 0xf)); | 292 _seen.add(object); |
| 292 break; | 293 } |
| 293 } | 294 void _removeSeen(object) { |
| 294 } else if (charCode == QUOTE || charCode == BACKSLASH) { | 295 assert (!_seen.isEmpty); assert (identical(_seen.last, object)); _seen.removeLas
t(); |
| 295 if (i > offset) writeStringSlice(s, offset, i); | 296 } |
| 296 offset = i + 1; | 297 void writeObject(object) { |
| 297 writeCharCode(BACKSLASH); | 298 if (writeJsonValue(object)) return; _checkCycle(object); |
| 298 writeCharCode(charCode); | 299 try { |
| 299 } | 300 var customJson = _toEncodable(object); |
| 300 } | 301 if (!writeJsonValue(customJson)) { |
| 301 if (offset == 0) { | 302 throw new JsonUnsupportedObjectError(object); |
| 302 writeString(s); | 303 } |
| 303 } else if (offset < length) { | 304 _removeSeen(object); |
| 304 writeStringSlice(s, offset, length); | 305 } |
| 305 } | 306 catch (e) { |
| 306 } | 307 throw new JsonUnsupportedObjectError(object, cause: e); |
| 307 void _checkCycle(object) { | 308 } |
| 308 for (int i = 0; i < _seen.length; i++) { | 309 } |
| 309 if (identical(object, _seen[i])) { | 310 bool writeJsonValue(object) { |
| 310 throw new JsonCyclicError(object); | 311 if (object is num) { |
| 311 } | 312 if (!object.isFinite) return false; |
| 312 } | 313 writeNumber(DDC$RT.cast(object, dynamic, num, "CastGeneral", """line 692, colum
n 19 of dart:convert/json.dart: """, object is num, true)); |
| 313 _seen.add(object); | 314 return true; |
| 314 } | 315 } |
| 315 void _removeSeen(object) { | 316 else if (identical(object, true)) { |
| 316 assert(!_seen.isEmpty); | 317 writeString('true'); |
| 317 assert(identical(_seen.last, object)); | 318 return true; |
| 318 _seen.removeLast(); | 319 } |
| 319 } | 320 else if (identical(object, false)) { |
| 320 void writeObject(object) { | 321 writeString('false'); |
| 321 if (writeJsonValue(object)) return; | 322 return true; |
| 322 _checkCycle(object); | 323 } |
| 323 try { | 324 else if (object == null) { |
| 324 var customJson = _toEncodable(object); | 325 writeString('null'); |
| 325 if (!writeJsonValue(customJson)) { | 326 return true; |
| 326 throw new JsonUnsupportedObjectError(object); | 327 } |
| 327 } | 328 else if (object is String) { |
| 328 _removeSeen(object); | 329 writeString('"'); |
| 329 } catch (e) { | 330 writeStringContent(DDC$RT.cast(object, dynamic, String, "CastGeneral", """line
705, column 26 of dart:convert/json.dart: """, object is String, true)); |
| 330 throw new JsonUnsupportedObjectError(object, cause: e); | 331 writeString('"'); |
| 331 } | 332 return true; |
| 332 } | 333 } |
| 333 bool writeJsonValue(object) { | 334 else if (object is List) { |
| 334 if (object is num) { | 335 _checkCycle(object); |
| 335 if (!object.isFinite) return false; | 336 writeList(DDC$RT.cast(object, dynamic, DDC$RT.type((List<dynamic> _) { |
| 336 writeNumber(DDC$RT.cast(object, dynamic, num, "CastGeneral", | 337 } |
| 337 """line 692, column 19 of dart:convert/json.dart: """, object is num, | 338 ), "CastGeneral", """line 710, column 17 of dart:convert/json.dart: """, object
is List<dynamic>, true)); |
| 338 true)); | 339 _removeSeen(object); |
| 339 return true; | 340 return true; |
| 340 } else if (identical(object, true)) { | 341 } |
| 341 writeString('true'); | 342 else if (object is Map) { |
| 342 return true; | 343 _checkCycle(object); |
| 343 } else if (identical(object, false)) { | 344 writeMap(DDC$RT.cast(object, dynamic, DDC$RT.type((Map<String, Object> _) { |
| 344 writeString('false'); | 345 } |
| 345 return true; | 346 ), "CastGeneral", """line 715, column 16 of dart:convert/json.dart: """, object
is Map<String, Object>, false)); |
| 346 } else if (object == null) { | 347 _removeSeen(object); |
| 347 writeString('null'); | 348 return true; |
| 348 return true; | 349 } |
| 349 } else if (object is String) { | 350 else { |
| 350 writeString('"'); | 351 return false; |
| 351 writeStringContent(DDC$RT.cast(object, dynamic, String, "CastGeneral", | 352 } |
| 352 """line 705, column 26 of dart:convert/json.dart: """, | 353 } |
| 353 object is String, true)); | 354 void writeList(List list) { |
| 354 writeString('"'); | 355 writeString('['); |
| 355 return true; | 356 if (list.length > 0) { |
| 356 } else if (object is List) { | 357 writeObject(list[0]); |
| 357 _checkCycle(object); | 358 for (int i = 1; |
| 358 writeList(DDC$RT.cast(object, dynamic, DDC$RT.type((List<dynamic> _) {}), | 359 i < list.length; |
| 359 "CastGeneral", """line 710, column 17 of dart:convert/json.dart: """, | 360 i++) { |
| 360 object is List<dynamic>, true)); | 361 writeString(','); |
| 361 _removeSeen(object); | 362 writeObject(list[i]); |
| 362 return true; | 363 } |
| 363 } else if (object is Map) { | 364 } |
| 364 _checkCycle(object); | 365 writeString(']'); |
| 365 writeMap(DDC$RT.cast(object, dynamic, | 366 } |
| 366 DDC$RT.type((Map<String, Object> _) {}), "CastGeneral", | 367 void writeMap(Map<String, Object> map) { |
| 367 """line 715, column 16 of dart:convert/json.dart: """, | 368 writeString('{'); |
| 368 object is Map<String, Object>, false)); | 369 String separator = '"'; |
| 369 _removeSeen(object); | 370 map.forEach((String key, value) { |
| 370 return true; | 371 writeString(separator); |
| 371 } else { | 372 separator = ',"'; |
| 372 return false; | 373 writeStringContent(key); |
| 373 } | 374 writeString('":'); |
| 374 } | 375 writeObject(value); |
| 375 void writeList(List list) { | 376 } |
| 376 writeString('['); | 377 ); |
| 377 if (list.length > 0) { | 378 writeString('}'); |
| 378 writeObject(list[0]); | 379 } |
| 379 for (int i = 1; i < list.length; i++) { | 380 } |
| 380 writeString(','); | 381 abstract class _JsonPrettyPrintMixin implements _JsonStringifier {int _indentLe
vel = 0; |
| 381 writeObject(list[i]); | 382 void writeIndentation(indentLevel); |
| 382 } | 383 void writeList(List list) { |
| 383 } | 384 if (list.isEmpty) { |
| 384 writeString(']'); | 385 writeString('[]'); |
| 385 } | 386 } |
| 386 void writeMap(Map<String, Object> map) { | 387 else { |
| 387 writeString('{'); | 388 writeString('[\n'); |
| 388 String separator = '"'; | 389 _indentLevel++; |
| 389 map.forEach((String key, value) { | 390 writeIndentation(_indentLevel); |
| 390 writeString(separator); | 391 writeObject(list[0]); |
| 391 separator = ',"'; | 392 for (int i = 1; |
| 392 writeStringContent(key); | 393 i < list.length; |
| 393 writeString('":'); | 394 i++) { |
| 394 writeObject(value); | 395 writeString(',\n'); |
| 395 }); | 396 writeIndentation(_indentLevel); |
| 396 writeString('}'); | 397 writeObject(list[i]); |
| 397 } | 398 } |
| 398 } | 399 writeString('\n'); |
| 399 abstract class _JsonPrettyPrintMixin implements _JsonStringifier { | 400 _indentLevel--; |
| 400 int _indentLevel = 0; | 401 writeIndentation(_indentLevel); |
| 401 void writeIndentation(indentLevel); | 402 writeString(']'); |
| 402 void writeList(List list) { | 403 } |
| 403 if (list.isEmpty) { | 404 } |
| 404 writeString('[]'); | 405 void writeMap(Map map) { |
| 405 } else { | 406 if (map.isEmpty) { |
| 406 writeString('[\n'); | 407 writeString('{}'); |
| 407 _indentLevel++; | 408 } |
| 408 writeIndentation(_indentLevel); | 409 else { |
| 409 writeObject(list[0]); | 410 writeString('{\n'); |
| 410 for (int i = 1; i < list.length; i++) { | 411 _indentLevel++; |
| 411 writeString(',\n'); | 412 bool first = true; |
| 412 writeIndentation(_indentLevel); | 413 map.forEach(((__x23) => DDC$RT.wrap((dynamic f(String __u15, Object __u16)) { |
| 413 writeObject(list[i]); | 414 dynamic c(String x0, Object x1) => f(DDC$RT.cast(x0, dynamic, String, "CastParam
", """line 792, column 19 of dart:convert/json.dart: """, x0 is String, true), x
1); |
| 414 } | 415 return f == null ? null : c; |
| 415 writeString('\n'); | 416 } |
| 416 _indentLevel--; | 417 , __x23, __t20, __t17, "WrapLiteral", """line 792, column 19 of dart:convert/jso
n.dart: """, __x23 is __t17))((String key, Object value) { |
| 417 writeIndentation(_indentLevel); | 418 if (!first) { |
| 418 writeString(']'); | 419 writeString(",\n"); |
| 419 } | 420 } |
| 420 } | 421 writeIndentation(_indentLevel); |
| 421 void writeMap(Map map) { | 422 writeString('"'); |
| 422 if (map.isEmpty) { | 423 writeStringContent(key); |
| 423 writeString('{}'); | 424 writeString('": '); |
| 424 } else { | 425 writeObject(value); |
| 425 writeString('{\n'); | 426 first = false; |
| 426 _indentLevel++; | 427 } |
| 427 bool first = true; | 428 )); |
| 428 map.forEach(((__x23) => DDC$RT.wrap( | 429 writeString('\n'); |
| 429 (dynamic f(String __u15, Object __u16)) { | 430 _indentLevel--; |
| 430 dynamic c(String x0, Object x1) => f(DDC$RT.cast(x0, dynamic, String, | 431 writeIndentation(_indentLevel); |
| 431 "CastParam", """line 792, column 19 of dart:convert/json.dart: """, | 432 writeString('}'); |
| 432 x0 is String, true), x1); | 433 } |
| 433 return f == null ? null : c; | 434 } |
| 434 }, __x23, __t20, __t17, "WrapLiteral", | 435 } |
| 435 """line 792, column 19 of dart:convert/json.dart: """, | 436 class _JsonStringStringifier extends _JsonStringifier {final StringSink _sink; |
| 436 __x23 is __t17))((String key, Object value) { | 437 _JsonStringStringifier(this._sink, _toEncodable) : super(DDC$RT.cast(_toEncodab
le, dynamic, __t24, "CastGeneral", """line 817, column 60 of dart:convert/json.d
art: """, _toEncodable is __t24, false)); |
| 437 if (!first) { | 438 static String stringify(object, toEncodable(object), String indent) { |
| 438 writeString(",\n"); | 439 StringBuffer output = new StringBuffer(); |
| 439 } | 440 printOn(object, output, toEncodable, indent); |
| 440 writeIndentation(_indentLevel); | 441 return output.toString(); |
| 441 writeString('"'); | 442 } |
| 442 writeStringContent(key); | 443 static void printOn(object, StringSink output, toEncodable(object), String inde
nt) { |
| 443 writeString('": '); | 444 var stringifier; |
| 444 writeObject(value); | 445 if (indent == null) { |
| 445 first = false; | 446 stringifier = new _JsonStringStringifier(output, toEncodable); |
| 446 })); | 447 } |
| 447 writeString('\n'); | 448 else { |
| 448 _indentLevel--; | 449 stringifier = new _JsonStringStringifierPretty(output, toEncodable, indent); |
| 449 writeIndentation(_indentLevel); | 450 } |
| 450 writeString('}'); | 451 stringifier.writeObject(object); |
| 451 } | 452 } |
| 452 } | 453 void writeNumber(num number) { |
| 453 } | 454 _sink.write(number.toString()); |
| 454 class _JsonStringStringifier extends _JsonStringifier { | 455 } |
| 455 final StringSink _sink; | 456 void writeString(String string) { |
| 456 _JsonStringStringifier(this._sink, _toEncodable) : super(DDC$RT.cast( | 457 _sink.write(string); |
| 457 _toEncodable, dynamic, __t24, "CastGeneral", | 458 } |
| 458 """line 817, column 60 of dart:convert/json.dart: """, | 459 void writeStringSlice(String string, int start, int end) { |
| 459 _toEncodable is __t24, false)); | 460 _sink.write(string.substring(start, end)); |
| 460 static String stringify(object, toEncodable(object), String indent) { | 461 } |
| 461 StringBuffer output = new StringBuffer(); | 462 void writeCharCode(int charCode) { |
| 462 printOn(object, output, toEncodable, indent); | 463 _sink.writeCharCode(charCode); |
| 463 return output.toString(); | 464 } |
| 464 } | 465 } |
| 465 static void printOn( | 466 class _JsonStringStringifierPretty extends _JsonStringStringifier with _JsonPre
ttyPrintMixin {final String _indent; |
| 466 object, StringSink output, toEncodable(object), String indent) { | 467 _JsonStringStringifierPretty(StringSink sink, Function toEncodable, this._inden
t) : super(sink, toEncodable); |
| 467 var stringifier; | 468 void writeIndentation(int count) { |
| 468 if (indent == null) { | 469 for (int i = 0; |
| 469 stringifier = new _JsonStringStringifier(output, toEncodable); | 470 i < count; |
| 470 } else { | 471 i++) writeString(_indent); |
| 471 stringifier = | 472 } |
| 472 new _JsonStringStringifierPretty(output, toEncodable, indent); | 473 } |
| 473 } | 474 class _JsonUtf8Stringifier extends _JsonStringifier {final int bufferSize; |
| 474 stringifier.writeObject(object); | 475 final Function addChunk; |
| 475 } | 476 Uint8List buffer; |
| 476 void writeNumber(num number) { | 477 int index = 0; |
| 477 _sink.write(number.toString()); | 478 _JsonUtf8Stringifier(toEncodable, int bufferSize, this.addChunk) : super(DDC$RT
.cast(toEncodable, dynamic, __t24, "CastGeneral", """line 893, column 15 of dart
:convert/json.dart: """, toEncodable is __t24, false)), this.bufferSize = buffer
Size, buffer = new Uint8List(bufferSize); |
| 478 } | 479 static void stringify(Object object, List<int> indent, toEncodableFunction(Obje
ct o), int bufferSize, void addChunk(Uint8List chunk, int start, int end)) { |
| 479 void writeString(String string) { | 480 _JsonUtf8Stringifier stringifier; |
| 480 _sink.write(string); | 481 if (indent != null) { |
| 481 } | 482 stringifier = new _JsonUtf8StringifierPretty(toEncodableFunction, indent, buffer
Size, addChunk); |
| 482 void writeStringSlice(String string, int start, int end) { | 483 } |
| 483 _sink.write(string.substring(start, end)); | 484 else { |
| 484 } | 485 stringifier = new _JsonUtf8Stringifier(toEncodableFunction, bufferSize, addChunk
); |
| 485 void writeCharCode(int charCode) { | 486 } |
| 486 _sink.writeCharCode(charCode); | 487 stringifier.writeObject(object); |
| 487 } | 488 stringifier.flush(); |
| 488 } | 489 } |
| 489 class _JsonStringStringifierPretty extends _JsonStringStringifier | 490 void flush() { |
| 490 with _JsonPrettyPrintMixin { | 491 if (index > 0) { |
| 491 final String _indent; | 492 addChunk(buffer, 0, index); |
| 492 _JsonStringStringifierPretty( | 493 } |
| 493 StringSink sink, Function toEncodable, this._indent) | 494 buffer = null; |
| 494 : super(sink, toEncodable); | 495 index = 0; |
| 495 void writeIndentation(int count) { | 496 } |
| 496 for (int i = 0; i < count; i++) writeString(_indent); | 497 void writeNumber(num number) { |
| 497 } | 498 writeAsciiString(number.toString()); |
| 498 } | 499 } |
| 499 class _JsonUtf8Stringifier extends _JsonStringifier { | 500 void writeAsciiString(String string) { |
| 500 final int bufferSize; | 501 for (int i = 0; |
| 501 final Function addChunk; | 502 i < string.length; |
| 502 Uint8List buffer; | 503 i++) { |
| 503 int index = 0; | 504 int char = string.codeUnitAt(i); |
| 504 _JsonUtf8Stringifier(toEncodable, int bufferSize, this.addChunk) | 505 assert (char <= 0x7f); writeByte(char); |
| 505 : super(DDC$RT.cast(toEncodable, dynamic, __t24, "CastGeneral", | 506 } |
| 506 """line 893, column 15 of dart:convert/json.dart: """, | 507 } |
| 507 toEncodable is __t24, false)), | 508 void writeString(String string) { |
| 508 this.bufferSize = bufferSize, | 509 writeStringSlice(string, 0, string.length); |
| 509 buffer = new Uint8List(bufferSize); | 510 } |
| 510 static void stringify(Object object, List<int> indent, | 511 void writeStringSlice(String string, int start, int end) { |
| 511 toEncodableFunction(Object o), int bufferSize, | 512 for (int i = start; |
| 512 void addChunk(Uint8List chunk, int start, int end)) { | 513 i < end; |
| 513 _JsonUtf8Stringifier stringifier; | 514 i++) { |
| 514 if (indent != null) { | 515 int char = string.codeUnitAt(i); |
| 515 stringifier = new _JsonUtf8StringifierPretty( | 516 if (char <= 0x7f) { |
| 516 toEncodableFunction, indent, bufferSize, addChunk); | 517 writeByte(char); |
| 517 } else { | 518 } |
| 518 stringifier = | 519 else { |
| 519 new _JsonUtf8Stringifier(toEncodableFunction, bufferSize, addChunk); | 520 if ((char & 0xFC00) == 0xD800 && i + 1 < end) { |
| 520 } | 521 int nextChar = string.codeUnitAt(i + 1); |
| 521 stringifier.writeObject(object); | 522 if ((nextChar & 0xFC00) == 0xDC00) { |
| 522 stringifier.flush(); | 523 char = 0x10000 + ((char & 0x3ff) << 10) + (nextChar & 0x3ff); |
| 523 } | 524 writeFourByteCharCode(char); |
| 524 void flush() { | 525 i++; |
| 525 if (index > 0) { | 526 continue; |
| 526 addChunk(buffer, 0, index); | 527 } |
| 527 } | 528 } |
| 528 buffer = null; | 529 writeMultiByteCharCode(char); |
| 529 index = 0; | 530 } |
| 530 } | 531 } |
| 531 void writeNumber(num number) { | 532 } |
| 532 writeAsciiString(number.toString()); | 533 void writeCharCode(int charCode) { |
| 533 } | 534 if (charCode <= 0x7f) { |
| 534 void writeAsciiString(String string) { | 535 writeByte(charCode); |
| 535 for (int i = 0; i < string.length; i++) { | 536 return;} |
| 536 int char = string.codeUnitAt(i); | 537 writeMultiByteCharCode(charCode); |
| 537 assert(char <= 0x7f); | 538 } |
| 538 writeByte(char); | 539 void writeMultiByteCharCode(int charCode) { |
| 539 } | 540 if (charCode <= 0x7ff) { |
| 540 } | 541 writeByte(0xC0 | (charCode >> 6)); |
| 541 void writeString(String string) { | 542 writeByte(0x80 | (charCode & 0x3f)); |
| 542 writeStringSlice(string, 0, string.length); | 543 return;} |
| 543 } | 544 if (charCode <= 0xffff) { |
| 544 void writeStringSlice(String string, int start, int end) { | 545 writeByte(0xE0 | (charCode >> 12)); |
| 545 for (int i = start; i < end; i++) { | 546 writeByte(0x80 | ((charCode >> 6) & 0x3f)); |
| 546 int char = string.codeUnitAt(i); | 547 writeByte(0x80 | (charCode & 0x3f)); |
| 547 if (char <= 0x7f) { | 548 return;} |
| 548 writeByte(char); | 549 writeFourByteCharCode(charCode); |
| 549 } else { | 550 } |
| 550 if ((char & 0xFC00) == 0xD800 && i + 1 < end) { | 551 void writeFourByteCharCode(int charCode) { |
| 551 int nextChar = string.codeUnitAt(i + 1); | 552 assert (charCode <= 0x10ffff); writeByte(0xF0 | (charCode >> 18)); |
| 552 if ((nextChar & 0xFC00) == 0xDC00) { | 553 writeByte(0x80 | ((charCode >> 12) & 0x3f)); |
| 553 char = 0x10000 + ((char & 0x3ff) << 10) + (nextChar & 0x3ff); | 554 writeByte(0x80 | ((charCode >> 6) & 0x3f)); |
| 554 writeFourByteCharCode(char); | 555 writeByte(0x80 | (charCode & 0x3f)); |
| 555 i++; | 556 } |
| 556 continue; | 557 void writeByte(int byte) { |
| 557 } | 558 assert (byte <= 0xff); if (index == buffer.length) { |
| 558 } | 559 addChunk(buffer, 0, index); |
| 559 writeMultiByteCharCode(char); | 560 buffer = new Uint8List(bufferSize); |
| 560 } | 561 index = 0; |
| 561 } | 562 } |
| 562 } | 563 buffer[index++] = byte; |
| 563 void writeCharCode(int charCode) { | 564 } |
| 564 if (charCode <= 0x7f) { | 565 } |
| 565 writeByte(charCode); | 566 class _JsonUtf8StringifierPretty extends _JsonUtf8Stringifier with _JsonPrettyP
rintMixin {final List<int> indent; |
| 566 return; | 567 _JsonUtf8StringifierPretty(toEncodableFunction, this.indent, bufferSize, addChu
nk) : super(toEncodableFunction, DDC$RT.cast(bufferSize, dynamic, int, "CastGene
ral", """line 1031, column 36 of dart:convert/json.dart: """, bufferSize is int,
true), DDC$RT.cast(addChunk, dynamic, Function, "CastGeneral", """line 1031, co
lumn 48 of dart:convert/json.dart: """, addChunk is Function, true)); |
| 567 } | 568 void writeIndentation(int count) { |
| 568 writeMultiByteCharCode(charCode); | 569 List<int> indent = this.indent; |
| 569 } | 570 int indentLength = indent.length; |
| 570 void writeMultiByteCharCode(int charCode) { | 571 if (indentLength == 1) { |
| 571 if (charCode <= 0x7ff) { | 572 int char = indent[0]; |
| 572 writeByte(0xC0 | (charCode >> 6)); | 573 while (count > 0) { |
| 573 writeByte(0x80 | (charCode & 0x3f)); | 574 writeByte(char); |
| 574 return; | 575 count -= 1; |
| 575 } | 576 } |
| 576 if (charCode <= 0xffff) { | 577 return;} |
| 577 writeByte(0xE0 | (charCode >> 12)); | 578 while (count > 0) { |
| 578 writeByte(0x80 | ((charCode >> 6) & 0x3f)); | 579 count--; |
| 579 writeByte(0x80 | (charCode & 0x3f)); | 580 int end = index + indentLength; |
| 580 return; | 581 if (end <= buffer.length) { |
| 581 } | 582 buffer.setRange(index, end, indent); |
| 582 writeFourByteCharCode(charCode); | 583 index = end; |
| 583 } | 584 } |
| 584 void writeFourByteCharCode(int charCode) { | 585 else { |
| 585 assert(charCode <= 0x10ffff); | 586 for (int i = 0; |
| 586 writeByte(0xF0 | (charCode >> 18)); | 587 i < indentLength; |
| 587 writeByte(0x80 | ((charCode >> 12) & 0x3f)); | 588 i++) { |
| 588 writeByte(0x80 | ((charCode >> 6) & 0x3f)); | 589 writeByte(indent[i]); |
| 589 writeByte(0x80 | (charCode & 0x3f)); | 590 } |
| 590 } | 591 } |
| 591 void writeByte(int byte) { | 592 } |
| 592 assert(byte <= 0xff); | 593 } |
| 593 if (index == buffer.length) { | 594 } |
| 594 addChunk(buffer, 0, index); | 595 typedef dynamic __t7(dynamic __u8); |
| 595 buffer = new Uint8List(bufferSize); | 596 typedef dynamic __t11(Object __u12); |
| 596 index = 0; | 597 typedef void __t17(dynamic __u18, dynamic __u19); |
| 597 } | 598 typedef dynamic __t20(String __u21, Object __u22); |
| 598 buffer[index++] = byte; | 599 typedef Object __t24(Object __u25); |
| 599 } | |
| 600 } | |
| 601 class _JsonUtf8StringifierPretty extends _JsonUtf8Stringifier | |
| 602 with _JsonPrettyPrintMixin { | |
| 603 final List<int> indent; | |
| 604 _JsonUtf8StringifierPretty( | |
| 605 toEncodableFunction, this.indent, bufferSize, addChunk) | |
| 606 : super(toEncodableFunction, DDC$RT.cast(bufferSize, dynamic, int, | |
| 607 "CastGeneral", """line 1031, column 36 of dart:convert/json.dart: """, | |
| 608 bufferSize is int, true), DDC$RT.cast(addChunk, dynamic, Function, | |
| 609 "CastGeneral", """line 1031, column 48 of dart:convert/json.dart: """, | |
| 610 addChunk is Function, true)); | |
| 611 void writeIndentation(int count) { | |
| 612 List<int> indent = this.indent; | |
| 613 int indentLength = indent.length; | |
| 614 if (indentLength == 1) { | |
| 615 int char = indent[0]; | |
| 616 while (count > 0) { | |
| 617 writeByte(char); | |
| 618 count -= 1; | |
| 619 } | |
| 620 return; | |
| 621 } | |
| 622 while (count > 0) { | |
| 623 count--; | |
| 624 int end = index + indentLength; | |
| 625 if (end <= buffer.length) { | |
| 626 buffer.setRange(index, end, indent); | |
| 627 index = end; | |
| 628 } else { | |
| 629 for (int i = 0; i < indentLength; i++) { | |
| 630 writeByte(indent[i]); | |
| 631 } | |
| 632 } | |
| 633 } | |
| 634 } | |
| 635 } | |
| 636 typedef dynamic __t7(dynamic __u8); | |
| 637 typedef dynamic __t11(Object __u12); | |
| 638 typedef void __t17(dynamic __u18, dynamic __u19); | |
| 639 typedef dynamic __t20(String __u21, Object __u22); | |
| 640 typedef Object __t24(Object __u25); | |
| OLD | NEW |