// Copyright (c) 2017, 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. import 'chain.dart'; import 'frame.dart'; import 'lazy_trace.dart'; import 'trace.dart'; /// A thunk for lazily constructing a [Chain]. typedef ChainThunk = Chain Function(); /// A wrapper around a [ChainThunk]. This works around issue 9579 by avoiding /// the conversion of native [StackTrace]s to strings until it's absolutely /// necessary. class LazyChain implements Chain { final ChainThunk _thunk; late final Chain _chain = _thunk(); LazyChain(this._thunk); @override List get traces => _chain.traces; @override Chain get terse => _chain.terse; @override Chain foldFrames(bool Function(Frame) predicate, {bool terse = false}) => LazyChain(() => _chain.foldFrames(predicate, terse: terse)); @override Trace toTrace() => LazyTrace(_chain.toTrace); @override String toString() => _chain.toString(); }