Index: mojo/public/dart/third_party/source_span/lib/src/location_mixin.dart |
diff --git a/mojo/public/dart/third_party/source_span/lib/src/location_mixin.dart b/mojo/public/dart/third_party/source_span/lib/src/location_mixin.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..5aa0de5ce5e97cb16696677de44ca71f30573981 |
--- /dev/null |
+++ b/mojo/public/dart/third_party/source_span/lib/src/location_mixin.dart |
@@ -0,0 +1,51 @@ |
+// Copyright (c) 2015, 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.location_mixin; |
+ |
+import 'location.dart'; |
+import 'span.dart'; |
+ |
+// Note: this class duplicates a lot of functionality of [SourceLocation]. This |
+// is because in order for SourceLocation to use SourceLocationMixin, |
+// SourceLocationMixin couldn't implement SourceLocation. In SourceSpan we |
+// handle this by making the class itself non-extensible, but that would be a |
+// breaking change for SourceLocation. So until we want to endure the pain of |
+// cutting a release with breaking changes, we duplicate the code here. |
+ |
+/// A mixin for easily implementing [SourceLocation]. |
+abstract class SourceLocationMixin implements SourceLocation { |
+ String get toolString { |
+ var source = sourceUrl == null ? 'unknown source' : sourceUrl; |
+ return '$source:${line + 1}:${column + 1}'; |
+ } |
+ |
+ int distance(SourceLocation other) { |
+ if (sourceUrl != other.sourceUrl) { |
+ throw new ArgumentError("Source URLs \"${sourceUrl}\" and " |
+ "\"${other.sourceUrl}\" don't match."); |
+ } |
+ return (offset - other.offset).abs(); |
+ } |
+ |
+ SourceSpan pointSpan() => new SourceSpan(this, this, ""); |
+ |
+ int compareTo(SourceLocation other) { |
+ if (sourceUrl != other.sourceUrl) { |
+ throw new ArgumentError("Source URLs \"${sourceUrl}\" and " |
+ "\"${other.sourceUrl}\" don't match."); |
+ } |
+ return offset - other.offset; |
+ } |
+ |
+ bool operator ==(other) => |
+ other is SourceLocation && |
+ sourceUrl == other.sourceUrl && |
+ offset == other.offset; |
+ |
+ int get hashCode => sourceUrl.hashCode + offset; |
+ |
+ String toString() => '<$runtimeType: $offset $toolString>'; |
+} |
+ |