| Index: tool/input_sdk/lib/convert/utf.dart
|
| diff --git a/tool/input_sdk/lib/convert/utf.dart b/tool/input_sdk/lib/convert/utf.dart
|
| index d16d2c67d399774e25372684723764a7bbf542d2..a93c9aec2c19a56680936d50c899900faed50a06 100644
|
| --- a/tool/input_sdk/lib/convert/utf.dart
|
| +++ b/tool/input_sdk/lib/convert/utf.dart
|
| @@ -66,7 +66,7 @@ class Utf8Codec extends Encoding {
|
| return new Utf8Decoder(allowMalformed: allowMalformed).convert(codeUnits);
|
| }
|
|
|
| - Utf8Encoder get encoder => new Utf8Encoder();
|
| + Utf8Encoder get encoder => const Utf8Encoder();
|
| Utf8Decoder get decoder {
|
| return new Utf8Decoder(allowMalformed: _allowMalformed);
|
| }
|
| @@ -76,7 +76,8 @@ class Utf8Codec extends Encoding {
|
| * This class converts strings to their UTF-8 code units (a list of
|
| * unsigned 8-bit integers).
|
| */
|
| -class Utf8Encoder extends Converter<String, List<int>> {
|
| +class Utf8Encoder extends
|
| + ChunkedConverter<String, List<int>, String, List<int>> {
|
|
|
| const Utf8Encoder();
|
|
|
| @@ -304,7 +305,8 @@ class _Utf8EncoderSink extends _Utf8Encoder with StringConversionSinkMixin {
|
| * This class converts UTF-8 code units (lists of unsigned 8-bit integers)
|
| * to a string.
|
| */
|
| -class Utf8Decoder extends Converter<List<int>, String> {
|
| +class Utf8Decoder extends
|
| + ChunkedConverter<List<int>, String, List<int>, String> {
|
| final bool _allowMalformed;
|
|
|
| /**
|
| @@ -331,6 +333,13 @@ class Utf8Decoder extends Converter<List<int>, String> {
|
| * character is discarded.
|
| */
|
| String convert(List<int> codeUnits, [int start = 0, int end]) {
|
| + // Allow the implementation to intercept and specialize based on the type
|
| + // of codeUnits.
|
| + String result = _convertIntercepted(_allowMalformed, codeUnits, start, end);
|
| + if (result != null) {
|
| + return result;
|
| + }
|
| +
|
| int length = codeUnits.length;
|
| RangeError.checkValidRange(start, end, length);
|
| if (end == null) end = length;
|
| @@ -361,6 +370,9 @@ class Utf8Decoder extends Converter<List<int>, String> {
|
| Stream<String> bind(Stream<List<int>> stream) => super.bind(stream);
|
|
|
| external Converter<List<int>,dynamic> fuse(Converter<String, dynamic> next);
|
| +
|
| + external static String _convertIntercepted(
|
| + bool allowMalformed, List<int> codeUnits, int start, int end);
|
| }
|
|
|
| // UTF-8 constants.
|
| @@ -376,8 +388,6 @@ const int _SURROGATE_VALUE_MASK = 0x3FF;
|
| const int _LEAD_SURROGATE_MIN = 0xD800;
|
| const int _TAIL_SURROGATE_MIN = 0xDC00;
|
|
|
| -bool _isSurrogate(int codeUnit) =>
|
| - (codeUnit & _SURROGATE_MASK) == _LEAD_SURROGATE_MIN;
|
| bool _isLeadSurrogate(int codeUnit) =>
|
| (codeUnit & _SURROGATE_TAG_MASK) == _LEAD_SURROGATE_MIN;
|
| bool _isTailSurrogate(int codeUnit) =>
|
| @@ -386,7 +396,6 @@ int _combineSurrogatePair(int lead, int tail) =>
|
| 0x10000 + ((lead & _SURROGATE_VALUE_MASK) << 10)
|
| | (tail & _SURROGATE_VALUE_MASK);
|
|
|
| -
|
| /**
|
| * Decodes UTF-8.
|
| *
|
|
|