// 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. import 'frame.dart'; /// An implementation of [StackTrace] that emulates the behavior of the VM's /// implementation. /// /// In particular, when [toString] is called, this returns a string in the VM's /// stack trace format. class VMTrace implements StackTrace { /// The stack frames that comprise this stack trace. final List frames; VMTrace(this.frames); @override String toString() { var i = 1; return frames.map((frame) { var number = '#${i++}'.padRight(8); var member = frame.member! .replaceAllMapped(RegExp(r'[^.]+\.'), (match) => '${match[1]}.<${match[1]}_async_body>') .replaceAll('', ''); var line = frame.line ?? 0; var column = frame.column ?? 0; return '$number$member (${frame.uri}:$line:$column)\n'; }).join(); } }