Index: pkg/kernel/lib/type_propagation/canonicalizer.dart |
diff --git a/pkg/kernel/lib/type_propagation/canonicalizer.dart b/pkg/kernel/lib/type_propagation/canonicalizer.dart |
deleted file mode 100644 |
index 60192b59f4a55aa94ffbcef182773459c7698b21..0000000000000000000000000000000000000000 |
--- a/pkg/kernel/lib/type_propagation/canonicalizer.dart |
+++ /dev/null |
@@ -1,109 +0,0 @@ |
-// Copyright (c) 2016, 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 kernel.type_propagation.canonicalizer; |
- |
-import 'dart:collection'; |
- |
-/// Generates unique consecutive integer IDs for tuples of variable length. |
-class TupleCanonicalizer { |
- final HashMap<List<Object>, int> _table = new HashMap<List<Object>, int>( |
- equals: _contentEquals, hashCode: _contentHashCode); |
- final List<List<Object>> _canonicalList = <List<Object>>[]; |
- List<Object> _buffer = []; |
- |
- void _push(Object value) { |
- _buffer.add(value); |
- } |
- |
- int _finish() { |
- int index = _table[_buffer]; |
- if (index == null) { |
- index = _canonicalList.length; |
- _canonicalList.add(_buffer); |
- _table[_buffer] = index; |
- _buffer = []; |
- } else { |
- // The item already existed. Reuse the buffer object for the next query. |
- _buffer.clear(); |
- } |
- return index; |
- } |
- |
- /// Generate or get the ID for a "unary tuple". |
- int get1(Object first) { |
- _push(first); |
- return _finish(); |
- } |
- |
- /// Generate or get the ID for a pair. |
- int get2(Object first, Object second) { |
- _push(first); |
- _push(second); |
- return _finish(); |
- } |
- |
- /// Generate or get the ID for a triple. |
- int get3(Object first, Object second, Object third) { |
- _push(first); |
- _push(second); |
- _push(third); |
- return _finish(); |
- } |
- |
- List<Object> getFromIndex(int index) { |
- return _canonicalList[index]; |
- } |
- |
- int get length => _canonicalList.length; |
- |
- static bool _contentEquals(List<Object> first, List<Object> second) { |
- if (first.length != second.length) return false; |
- for (int i = 0; i < first.length; ++i) { |
- if (first[i] != second[i]) return false; |
- } |
- return true; |
- } |
- |
- static int _contentHashCode(List<Object> list) { |
- int hash = 0; |
- for (int i = 0; i < list.length; ++i) { |
- hash = (hash * 31 + hash ^ list[i].hashCode) & 0x3fffffff; |
- } |
- return hash; |
- } |
-} |
- |
-/// Maps uint31 pairs to values of type [T]. |
-class Uint31PairMap<T> { |
- final HashMap<int, T> _table = new HashMap<int, T>(hashCode: _bigintHash); |
- int _key; |
- |
- /// Returns the value associated with the given pair, or `null` if no value |
- /// is associated with the pair. |
- /// |
- /// This association can be changed using a subsequent call to [put]. |
- T lookup(int x, int y) { |
- assert(x >= 0 && x >> 31 == 0); |
- assert(y >= 0 && y >> 31 == 0); |
- int key = (x << 31) + y; |
- _key = key; |
- return _table[key]; |
- } |
- |
- /// Associates [value] with the pair previously queried using [lookup]. |
- void put(T value) { |
- _table[_key] = value; |
- } |
- |
- Iterable<T> get values => _table.values; |
- |
- static int _bigintHash(int bigint) { |
- int x = 0x3fffffff & (bigint >> 31); |
- int y = 0x3fffffff & bigint; |
- int hash = 0x3fffffff & (x * 1367); |
- hash = 0x3fffffff & (y * 31 + hash ^ y); |
- hash = 0x3fffffff & ((x ^ y) * 31 + hash ^ y); |
- return hash; |
- } |
-} |