Index: mojo/public/dart/third_party/source_span/lib/src/span_exception.dart |
diff --git a/mojo/public/dart/third_party/source_span/lib/src/span_exception.dart b/mojo/public/dart/third_party/source_span/lib/src/span_exception.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..36f2488329d1331589ab9dc3f1635e7ba81a7cd4 |
--- /dev/null |
+++ b/mojo/public/dart/third_party/source_span/lib/src/span_exception.dart |
@@ -0,0 +1,43 @@ |
+// 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. |
+ |
+library source_span.span_exception; |
+ |
+import 'span.dart'; |
+ |
+/// A class for exceptions that have source span information attached. |
+class SourceSpanException implements Exception { |
+ /// A message describing the exception. |
+ final String message; |
+ |
+ /// The span associated with this exception. |
+ /// |
+ /// This may be `null` if the source location can't be determined. |
+ 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 { |
+ final source; |
+ |
+ int get offset => span == null ? null : span.start.offset; |
+ |
+ SourceSpanFormatException(String message, SourceSpan span, [this.source]) |
+ : super(message, span); |
+} |