blob: 8c4482971bd6a3b4690df51e8a6b4e7975ca2d3d [file] [log] [blame]
// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
library lazy_trace;
import 'frame.dart';
import 'trace.dart';
/// A thunk for lazily constructing a [Trace].
typedef Trace TraceThunk();
/// A wrapper around a [TraceThunk]. This works around issue 9579 by avoiding
/// the conversion of native [StackTrace]s to strings until it's absolutely
/// necessary.
class LazyTrace implements Trace {
final TraceThunk _thunk;
Trace _inner;
LazyTrace(this._thunk);
Trace get _trace {
if (_inner == null) _inner = _thunk();
return _inner;
}
List<Frame> get frames => _trace.frames;
String get stackTrace => _trace.stackTrace;
String get fullStackTrace => _trace.fullStackTrace;
Trace get terse => new LazyTrace(() => _trace.terse);
Trace foldFrames(bool predicate(frame)) =>
new LazyTrace(() => _trace.foldFrames(predicate));
String toString() => _trace.toString();
}