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

Side by Side Diff: sdk/lib/convert/line_splitter.dart

Issue 2667813002: Optimize StackTrace.current Eliminate redundant call to captureStackTrace and compute the stack tra… (Closed)
Patch Set: for discussion Created 3 years, 10 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
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, 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 part of dart.convert; 5 part of dart.convert;
6 6
7 // Character constants. 7 // Character constants.
8 const int _LF = 10; 8 const int _LF = 10;
9 const int _CR = 13; 9 const int _CR = 13;
10 10
11 /** 11 /**
12 * A [StreamTransformer] that splits a [String] into individual lines. 12 * A [StreamTransformer] that splits a [String] into individual lines.
13 * 13 *
14 * A line is terminated by either a CR (U+000D), a LF (U+000A), a 14 * A line is terminated by either a CR (U+000D), a LF (U+000A), a
15 * CR+LF sequence (DOS line ending), 15 * CR+LF sequence (DOS line ending),
16 * and a final non-empty line can be ended by the end of the string. 16 * and a final non-empty line can be ended by the end of the string.
17 * 17 *
18 * The returned lines do not contain the line terminators. 18 * The returned lines do not contain the line terminators.
19 */ 19 */
20 20
21 class LineSplitter 21 class LineSplitter
22 extends Converter<String, List<String>>/*=Object*/ 22 implements StreamTransformer<String, String> {
23 implements ChunkedConverter<String, List<String>, String, String>
24 /*=StreamTransformer<String, String>*/ {
25 23
26 const LineSplitter(); 24 const LineSplitter();
27 25
28 /// Split [lines] into individual lines. 26 /// Split [lines] into individual lines.
29 /// 27 ///
30 /// If [start] and [end] are provided, only split the contents of 28 /// If [start] and [end] are provided, only split the contents of
31 /// `lines.substring(start, end)`. The [start] and [end] values must 29 /// `lines.substring(start, end)`. The [start] and [end] values must
32 /// specify a valid sub-range of [lines] 30 /// specify a valid sub-range of [lines]
33 /// (`0 <= start <= end <= lines.length`). 31 /// (`0 <= start <= end <= lines.length`).
34 static Iterable<String> split(String lines, [int start = 0, int end]) sync* { 32 static Iterable<String> split(String lines, [int start = 0, int end]) sync* {
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
77 return lines; 75 return lines;
78 } 76 }
79 77
80 StringConversionSink startChunkedConversion(Sink<String> sink) { 78 StringConversionSink startChunkedConversion(Sink<String> sink) {
81 if (sink is! StringConversionSink) { 79 if (sink is! StringConversionSink) {
82 sink = new StringConversionSink.from(sink); 80 sink = new StringConversionSink.from(sink);
83 } 81 }
84 return new _LineSplitterSink(sink); 82 return new _LineSplitterSink(sink);
85 } 83 }
86 84
87 Stream/*<String>*/ bind(Stream<String> stream) { 85 Stream<String> bind(Stream<String> stream) {
88 return new Stream<String>.eventTransformed( 86 return new Stream<String>.eventTransformed(
89 stream, 87 stream,
90 (EventSink<String> sink) => new _LineSplitterEventSink(sink)); 88 (EventSink<String> sink) => new _LineSplitterEventSink(sink));
91 } 89 }
92 } 90 }
93 91
94 // TODO(floitsch): deal with utf8. 92 // TODO(floitsch): deal with utf8.
95 class _LineSplitterSink extends StringConversionSinkBase { 93 class _LineSplitterSink extends StringConversionSinkBase {
96 final StringConversionSink _sink; 94 final StringConversionSink _sink;
97 95
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
172 final EventSink<String> _eventSink; 170 final EventSink<String> _eventSink;
173 171
174 _LineSplitterEventSink(EventSink<String> eventSink) 172 _LineSplitterEventSink(EventSink<String> eventSink)
175 : _eventSink = eventSink, 173 : _eventSink = eventSink,
176 super(new StringConversionSink.from(eventSink)); 174 super(new StringConversionSink.from(eventSink));
177 175
178 void addError(Object o, [StackTrace stackTrace]) { 176 void addError(Object o, [StackTrace stackTrace]) {
179 _eventSink.addError(o, stackTrace); 177 _eventSink.addError(o, stackTrace);
180 } 178 }
181 } 179 }
OLDNEW
« no previous file with comments | « sdk/lib/_internal/js_runtime/lib/core_patch.dart ('k') | sdk/lib/html/dart2js/html_dart2js.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698