blob: 6d3448b6c4f25082882849c76b5b146a943f6d9e [file] [log] [blame]
// Copyright (c) 2014, 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 'span.dart';
/// A class for exceptions that have source span information attached.
class SourceSpanException implements Exception {
// This is a getter so that subclasses can override it.
/// A message describing the exception.
String get message => _message;
final String _message;
// This is a getter so that subclasses can override it.
/// The span associated with this exception.
///
/// This may be `null` if the source location can't be determined.
SourceSpan get span => _span;
final SourceSpan _span;
SourceSpanException(this._message, this._span);
/// Returns a string representation of [this].
///
/// [color] may either be a [String], a [bool], or `null`. If it's a string,
/// it indicates an ANSII terminal color escape that should be used to
/// highlight the span's text. If it's `true`, it indicates that the text
/// should be highlighted using the default color. If it's `false` or `null`,
/// it indicates that the text shouldn't be highlighted.
String toString({color}) {
if (span == null) return message;
return "Error on " + span.message(message, color: color);
}
}
/// A [SourceSpanException] that's also a [FormatException].
class SourceSpanFormatException extends SourceSpanException
implements FormatException {
// This is a getter so that subclasses can override it.
dynamic get source => _source;
final _source;
int get offset => span == null ? null : span.start.offset;
SourceSpanFormatException(String message, SourceSpan span, [this._source])
: super(message, span);
}