content: // Copyright (c) 2012, 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.
  
  part of dart.core;
  
  // Exceptions are thrown either by the VM or from Dart code.
  
  /**
   * A marker interface implemented by all core library exceptions.
   *
   * An [Exception] is intended to convey information to the user about a failure,
   * so that the error can be addressed programmatically. It is intended to be
   * caught, and it should contain useful data fields.
   *
   * Creating instances of [Exception] directly with [:new Exception("message"):]
   * is discouraged, and only included as a temporary measure during development,
   * until the actual exceptions used by a library are done.
   */
  abstract class Exception {
    factory Exception([var message]) => new _ExceptionImplementation(message);
  }
  
  
  /** Default implementation of [Exception] which carries a message. */
  class _ExceptionImplementation implements Exception {
    final message;
  
    _ExceptionImplementation([this.message]);
  
    String toString() {
      if (message == null) return "Exception";
      return "Exception: $message";
    }
  }
  
  
  /**
   * Exception thrown when a string or some other data does not have an expected
   * format and cannot be parsed or processed.
   */
  class FormatException implements Exception {
    /**
     * A message describing the format error.
     */
    final String message;
  
    /**
     * Creates a new FormatException with an optional error [message].
     */
    const FormatException([this.message = ""]);
  
    String toString() => "FormatException: $message";
  }
  
  class IntegerDivisionByZeroException implements Exception {
    const IntegerDivisionByZeroException();
    String toString() => "IntegerDivisionByZeroException";
  }
  