// 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.

// @dart = 2.5

part of dart.core;

/**
 * An interface implemented by all stack trace objects.
 *
 * A [StackTrace] is intended to convey information to the user about the call
 * sequence that triggered an exception.
 *
 * These objects are created by the runtime, it is not possible to create
 * them programmatically.
 */
abstract class StackTrace {
  StackTrace(); // In case existing classes extend StackTrace.

  /**
   * Create a `StackTrace` object from [stackTraceString].
   *
   * The created stack trace will have a `toString` method returning
   * `stackTraceString`.
   *
   * The `stackTraceString` can be a string returned by some other
   * stack trace, or it can be any string at all.
   * If the string doesn't look like a stack trace, code that interprets
   * stack traces is likely to fail, so fake stack traces should be used
   * with care.
   */
  factory StackTrace.fromString(String stackTraceString) = _StringStackTrace;

  /**
   * Returns a representation of the current stack trace.
   *
   * This is similar to what can be achieved by doing:
   *
   *     try { throw 0; } catch (_, stack) { return stack; }
   *
   * The getter achieves this without throwing, except on platforms that
   * have no other way to get a stack trace.
   */
  external static StackTrace get current;

  /**
   * Returns a [String] representation of the stack trace.
   *
   * The string represents the full stack trace starting from
   * the point where a throw occurred to the top of the current call sequence.
   *
   * The exact format of the string representation is not final.
   */
  String toString();
}

class _StringStackTrace implements StackTrace {
  final String _stackTrace;
  _StringStackTrace(this._stackTrace);
  String toString() => _stackTrace;
}
