OLD | NEW |
| (Empty) |
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 | |
3 // BSD-style license that can be found in the LICENSE file. | |
4 | |
5 library lazy_trace; | |
6 | |
7 import 'frame.dart'; | |
8 import 'trace.dart'; | |
9 | |
10 /// A thunk for lazily constructing a [Trace]. | |
11 typedef Trace TraceThunk(); | |
12 | |
13 /// A wrapper around a [TraceThunk]. This works around issue 9579 by avoiding | |
14 /// the conversion of native [StackTrace]s to strings until it's absolutely | |
15 /// necessary. | |
16 class LazyTrace implements Trace { | |
17 final TraceThunk _thunk; | |
18 Trace _inner; | |
19 | |
20 LazyTrace(this._thunk); | |
21 | |
22 Trace get _trace { | |
23 if (_inner == null) _inner = _thunk(); | |
24 return _inner; | |
25 } | |
26 | |
27 List<Frame> get frames => _trace.frames; | |
28 StackTrace get vmTrace => _trace.vmTrace; | |
29 Trace get terse => new LazyTrace(() => _trace.terse); | |
30 Trace foldFrames(bool predicate(Frame frame), {bool terse: false}) => | |
31 new LazyTrace(() => _trace.foldFrames(predicate, terse: terse)); | |
32 String toString() => _trace.toString(); | |
33 | |
34 // Work around issue 14075. | |
35 set frames(_) => throw new UnimplementedError(); | |
36 } | |
OLD | NEW |