| Index: pkg/compiler/lib/src/ordered_typeset.dart
|
| diff --git a/pkg/compiler/lib/src/ordered_typeset.dart b/pkg/compiler/lib/src/ordered_typeset.dart
|
| index 1ec9ff337306f58a08a0fb08e058388434cc4a12..c3bb16d711ae56b6af7b2b5b36060d11871a91a1 100644
|
| --- a/pkg/compiler/lib/src/ordered_typeset.dart
|
| +++ b/pkg/compiler/lib/src/ordered_typeset.dart
|
| @@ -32,7 +32,7 @@ class OrderedTypeSet {
|
| final Link<DartType> types;
|
| final Link<DartType> _supertypes;
|
|
|
| - OrderedTypeSet._internal(List<Link<DartType>> this._levels,
|
| + OrderedTypeSet.internal(List<Link<DartType>> this._levels,
|
| Link<DartType> this.types,
|
| Link<DartType> this._supertypes);
|
|
|
| @@ -41,7 +41,7 @@ class OrderedTypeSet {
|
| new LinkEntry<DartType>(type, const Link<DartType>());
|
| List<Link<DartType>> list = new List<Link<DartType>>(1);
|
| list[0] = types;
|
| - return new OrderedTypeSet._internal(list, types, const Link<DartType>());
|
| + return new OrderedTypeSet.internal(list, types, const Link<DartType>());
|
| }
|
|
|
| /// Creates a new [OrderedTypeSet] for [type] when it directly extends the
|
| @@ -58,7 +58,7 @@ class OrderedTypeSet {
|
| list[i] = _levels[i];
|
| }
|
| list[levels] = extendedTypes;
|
| - return new OrderedTypeSet._internal(
|
| + return new OrderedTypeSet.internal(
|
| list, extendedTypes, _supertypes.prepend(types.head));
|
| }
|
|
|
| @@ -75,6 +75,21 @@ class OrderedTypeSet {
|
| return const Link<DartType>();
|
| }
|
|
|
| + /// Returns the offsets into [types] at which each level begins.
|
| + List<int> get levelOffsets {
|
| + List<int> offsets = new List.filled(levels, -1);
|
| + int offset = 0;
|
| + Link<DartType> pointer = types;
|
| + for (int depth = maxDepth; depth >= 0; depth--) {
|
| + while (!identical(pointer, _levels[depth])) {
|
| + pointer = pointer.tail;
|
| + offset++;
|
| + }
|
| + offsets[depth] = offset;
|
| + }
|
| + return offsets;
|
| + }
|
| +
|
| void forEach(int level, void f(DartType type)) {
|
| if (level < levels) {
|
| Link<DartType> pointer = _levels[level];
|
| @@ -180,7 +195,7 @@ class OrderedTypeSetBuilder {
|
| OrderedTypeSet toTypeSet() {
|
| List<Link<DartType>> levels = new List<Link<DartType>>(maxDepth + 1);
|
| if (maxDepth < 0) {
|
| - return new OrderedTypeSet._internal(
|
| + return new OrderedTypeSet.internal(
|
| levels, const Link<DartType>(), const Link<DartType>());
|
| }
|
| Link<DartType> next = const Link<DartType>();
|
| @@ -198,7 +213,7 @@ class OrderedTypeSetBuilder {
|
| next = first;
|
| }
|
| }
|
| - return new OrderedTypeSet._internal(
|
| + return new OrderedTypeSet.internal(
|
| levels, levels.last, allSupertypes.toLink());
|
| }
|
|
|
|
|