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

Side by Side Diff: test/dart_codegen/expect/convert/string_conversion.dart

Issue 1148283010: Remove dart backend (Closed) Base URL: https://github.com/dart-lang/dev_compiler.git@master
Patch Set: Created 5 years, 6 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
OLDNEW
(Empty)
1 part of dart.convert;
2 abstract class StringConversionSink extends ChunkedConversionSink<String> {Stri ngConversionSink();
3 factory StringConversionSink.withCallback(void callback(String accumulated)) = _StringCallbackSink;
4 factory StringConversionSink.from(Sink<String> sink) = _StringAdapterSink;
5 factory StringConversionSink.fromStringSink(StringSink sink) = _StringSinkConve rsionSink;
6 void addSlice(String chunk, int start, int end, bool isLast);
7 ByteConversionSink asUtf8Sink(bool allowMalformed);
8 ClosableStringSink asStringSink();
9 }
10 abstract class ClosableStringSink extends StringSink {factory ClosableStringSin k.fromStringSink(StringSink sink, void onClose()) = _ClosableStringSink;
11 void close();
12 }
13 typedef void _StringSinkCloseCallback();
14 class _ClosableStringSink implements ClosableStringSink {final _StringSinkClose Callback _callback;
15 final StringSink _sink;
16 _ClosableStringSink(this._sink, this._callback);
17 void close() => _callback();
18 void writeCharCode(int charCode) => _sink.writeCharCode(charCode);
19 void write(Object o) => _sink.write(o);
20 void writeln([Object o = ""]) => _sink.writeln(o);
21 void writeAll(Iterable objects, [String separator = ""]) => _sink.writeAll(obje cts, separator);
22 }
23 class _StringConversionSinkAsStringSinkAdapter implements ClosableStringSink {s tatic const _MIN_STRING_SIZE = 16;
24 StringBuffer _buffer;
25 StringConversionSink _chunkedSink;
26 _StringConversionSinkAsStringSinkAdapter(this._chunkedSink) : _buffer = new Str ingBuffer();
27 void close() {
28 if (_buffer.isNotEmpty) _flush();
29 _chunkedSink.close();
30 }
31 void writeCharCode(int charCode) {
32 _buffer.writeCharCode(charCode);
33 if (_buffer.length > _MIN_STRING_SIZE) _flush();
34 }
35 void write(Object o) {
36 if (_buffer.isNotEmpty) _flush();
37 String str = o.toString();
38 _chunkedSink.add(o.toString());
39 }
40 void writeln([Object o = ""]) {
41 _buffer.writeln(o);
42 if (_buffer.length > _MIN_STRING_SIZE) _flush();
43 }
44 void writeAll(Iterable objects, [String separator = ""]) {
45 if (_buffer.isNotEmpty) _flush();
46 Iterator iterator = objects.iterator;
47 if (!iterator.moveNext()) return; if (separator.isEmpty) {
48 do {
49 _chunkedSink.add(iterator.current.toString());
50 }
51 while (iterator.moveNext());}
52 else {
53 _chunkedSink.add(iterator.current.toString());
54 while (iterator.moveNext()) {
55 write(separator);
56 _chunkedSink.add(iterator.current.toString());
57 }
58 }
59 }
60 void _flush() {
61 String accumulated = _buffer.toString();
62 _buffer.clear();
63 _chunkedSink.add(accumulated);
64 }
65 }
66 abstract class StringConversionSinkBase extends StringConversionSinkMixin {}
67 abstract class StringConversionSinkMixin implements StringConversionSink {void addSlice(String str, int start, int end, bool isLast);
68 void close();
69 void add(String str) => addSlice(str, 0, str.length, false);
70 ByteConversionSink asUtf8Sink(bool allowMalformed) {
71 return new _Utf8ConversionSink(this, allowMalformed);
72 }
73 ClosableStringSink asStringSink() {
74 return new _StringConversionSinkAsStringSinkAdapter(this);
75 }
76 }
77 class _StringSinkConversionSink extends StringConversionSinkBase {StringSink _s tringSink;
78 _StringSinkConversionSink(StringSink this._stringSink);
79 void close() {
80 }
81 void addSlice(String str, int start, int end, bool isLast) {
82 if (start != 0 || end != str.length) {
83 for (int i = start; i < end; i++) {
84 _stringSink.writeCharCode(str.codeUnitAt(i));
85 }
86 }
87 else {
88 _stringSink.write(str);
89 }
90 if (isLast) close();
91 }
92 void add(String str) => _stringSink.write(str);
93 ByteConversionSink asUtf8Sink(bool allowMalformed) {
94 return new _Utf8StringSinkAdapter(this, _stringSink, allowMalformed);
95 }
96 ClosableStringSink asStringSink() {
97 return new ClosableStringSink.fromStringSink(_stringSink, this.close);
98 }
99 }
100 class _StringCallbackSink extends _StringSinkConversionSink {final _ChunkedConv ersionCallback<String> _callback;
101 _StringCallbackSink(this._callback) : super(new StringBuffer());
102 void close() {
103 StringBuffer buffer = DEVC$RT.cast(_stringSink, StringSink, StringBuffer, "Assig nmentCast", """line 233, column 27 of dart:convert/string_conversion.dart: """, _stringSink is StringBuffer, true);
104 String accumulated = buffer.toString();
105 buffer.clear();
106 _callback(accumulated);
107 }
108 ByteConversionSink asUtf8Sink(bool allowMalformed) {
109 return new _Utf8StringSinkAdapter(this, _stringSink, allowMalformed);
110 }
111 }
112 class _StringAdapterSink extends StringConversionSinkBase {final Sink<String> _ sink;
113 _StringAdapterSink(this._sink);
114 void add(String str) => _sink.add(str);
115 void addSlice(String str, int start, int end, bool isLast) {
116 if (start == 0 && end == str.length) {
117 add(str);
118 }
119 else {
120 add(str.substring(start, end));
121 }
122 if (isLast) close();
123 }
124 void close() => _sink.close();
125 }
126 class _Utf8StringSinkAdapter extends ByteConversionSink {final _Utf8Decoder _de coder;
127 final Sink _sink;
128 _Utf8StringSinkAdapter(this._sink, StringSink stringSink, bool allowMalformed) : _decoder = new _Utf8Decoder(stringSink, allowMalformed);
129 void close() {
130 _decoder.close();
131 if (_sink != null) _sink.close();
132 }
133 void add(List<int> chunk) {
134 addSlice(chunk, 0, chunk.length, false);
135 }
136 void addSlice(List<int> codeUnits, int startIndex, int endIndex, bool isLast) {
137 _decoder.convert(codeUnits, startIndex, endIndex);
138 if (isLast) close();
139 }
140 }
141 class _Utf8ConversionSink extends ByteConversionSink {final _Utf8Decoder _decod er;
142 final StringConversionSink _chunkedSink;
143 final StringBuffer _buffer;
144 _Utf8ConversionSink(StringConversionSink sink, bool allowMalformed) : this._(si nk, new StringBuffer(), allowMalformed);
145 _Utf8ConversionSink._(this._chunkedSink, StringBuffer stringBuffer, bool allowM alformed) : _decoder = new _Utf8Decoder(stringBuffer, allowMalformed), _buffer = stringBuffer;
146 void close() {
147 _decoder.close();
148 if (_buffer.isNotEmpty) {
149 String accumulated = _buffer.toString();
150 _buffer.clear();
151 _chunkedSink.addSlice(accumulated, 0, accumulated.length, true);
152 }
153 else {
154 _chunkedSink.close();
155 }
156 }
157 void add(List<int> chunk) {
158 addSlice(chunk, 0, chunk.length, false);
159 }
160 void addSlice(List<int> chunk, int startIndex, int endIndex, bool isLast) {
161 _decoder.convert(chunk, startIndex, endIndex);
162 if (_buffer.isNotEmpty) {
163 String accumulated = _buffer.toString();
164 _chunkedSink.addSlice(accumulated, 0, accumulated.length, isLast);
165 _buffer.clear();
166 return;}
167 if (isLast) close();
168 }
169 }
OLDNEW
« no previous file with comments | « test/dart_codegen/expect/convert/line_splitter.dart ('k') | test/dart_codegen/expect/convert/utf.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698