| Index: pkg/compiler/lib/src/js_emitter/constant_ordering.dart
|
| diff --git a/pkg/compiler/lib/src/js_emitter/constant_ordering.dart b/pkg/compiler/lib/src/js_emitter/constant_ordering.dart
|
| deleted file mode 100644
|
| index 0c500dede3431fdd26846489372866174527cbfb..0000000000000000000000000000000000000000
|
| --- a/pkg/compiler/lib/src/js_emitter/constant_ordering.dart
|
| +++ /dev/null
|
| @@ -1,212 +0,0 @@
|
| -// Copyright (c) 2012, 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 dart2js.js_emitter.constant_ordering;
|
| -
|
| -import '../constants/values.dart';
|
| -
|
| -import '../common.dart';
|
| -//import '../core_types.dart';
|
| -import '../dart_types.dart';
|
| -import '../elements/elements.dart'
|
| - show Element,
|
| - Elements,
|
| - FieldElement;
|
| -import '../tree/tree.dart' show DartString;
|
| -
|
| -/// A canonical but arbrary ordering of constants. The ordering is 'stable'
|
| -/// under perturbation of the source.
|
| -int deepCompareConstants(ConstantValue a, ConstantValue b) {
|
| - return _CompareVisitor.compareValues(a, b);
|
| -}
|
| -
|
| -class _CompareVisitor implements ConstantValueVisitor<int, ConstantValue> {
|
| - const _CompareVisitor();
|
| -
|
| - static int compareValues(ConstantValue a, ConstantValue b) {
|
| - if (identical(a, b)) return 0;
|
| - int r = _KindVisitor.kind(a).compareTo(_KindVisitor.kind(b));
|
| - if (r != 0) return r;
|
| - r = a.accept(const _CompareVisitor(), b);
|
| - return r;
|
| - }
|
| -
|
| - static int compareNullable(int compare(a, b), a, b) {
|
| - if (a == null && b == null) return 0;
|
| - if (a == null) return -1;
|
| - if (b == null) return 1;
|
| - return compare(a, b);
|
| - }
|
| -
|
| - static int compareLists(int compare(a, b), List a, List b) {
|
| - int r = a.length.compareTo(b.length);
|
| - if (r != 0) return r;
|
| - for (int i = 0; i < a.length; i++) {
|
| - r = compare(a[i], b[i]);
|
| - if (r != 0) return r;
|
| - }
|
| - return 0;
|
| - }
|
| -
|
| - static int compareElements(Element a, Element b) {
|
| - int r = a.name.compareTo(b.name);
|
| - if (r != 0) return r;
|
| - return Elements.compareByPosition(a, b);
|
| - }
|
| -
|
| - static int compareDartTypes(DartType a, DartType b) {
|
| - if (a == b) return 0;
|
| - int r = a.kind.index.compareTo(b.kind.index);
|
| - if (r != 0) return r;
|
| - r = compareNullable(compareElements, a.element, b.element);
|
| - if (r != 0) return r;
|
| -
|
| - if (a is GenericType) {
|
| - GenericType aGeneric = a;
|
| - GenericType bGeneric = b;
|
| - r = compareLists(compareDartTypes,
|
| - aGeneric.typeArguments, bGeneric.typeArguments);
|
| - if (r != 0) return r;
|
| - }
|
| - throw 'unexpected compareDartTypes $a $b';
|
| - }
|
| -
|
| - int visitFunction(FunctionConstantValue a, FunctionConstantValue b) {
|
| - return compareElements(a.element, b.element);
|
| - }
|
| -
|
| - int visitNull(NullConstantValue a, NullConstantValue b) {
|
| - return 0;
|
| - }
|
| -
|
| - int visitInt(IntConstantValue a, IntConstantValue b) {
|
| - return a.primitiveValue.compareTo(b.primitiveValue);
|
| - }
|
| -
|
| - int visitDouble(DoubleConstantValue a, DoubleConstantValue b) {
|
| - return a.primitiveValue.compareTo(b.primitiveValue);
|
| - }
|
| -
|
| - int visitBool(BoolConstantValue a, BoolConstantValue b) {
|
| - int aInt = a.primitiveValue ? 1 : 0;
|
| - int bInt = b.primitiveValue ? 1 : 0;
|
| - return aInt.compareTo(bInt);
|
| - }
|
| -
|
| - int visitString(StringConstantValue a, StringConstantValue b) {
|
| - DartString aString = a.primitiveValue;
|
| - DartString bString = b.primitiveValue;
|
| - int r = aString.length.compareTo(bString.length);
|
| - if (r != 0) return r;
|
| - return aString.slowToString().compareTo(bString.slowToString());
|
| - }
|
| -
|
| - int visitList(ListConstantValue a, ListConstantValue b) {
|
| - int r = compareLists(compareValues, a.entries, b.entries);
|
| - if (r != 0) return r;
|
| - return compareDartTypes(a.type, b.type);
|
| - }
|
| -
|
| - int visitMap(MapConstantValue a, MapConstantValue b) {
|
| - int r = compareLists(compareValues, a.keys, b.keys);
|
| - if (r != 0) return r;
|
| - r = compareLists(compareValues, a.values, b.values);
|
| - if (r != 0) return r;
|
| - return compareDartTypes(a.type, b.type);
|
| - }
|
| -
|
| - int visitConstructed(ConstructedConstantValue a, ConstructedConstantValue b) {
|
| - int r = compareDartTypes(a.type, b.type);
|
| - if (r != 0) return r;
|
| -
|
| - List<FieldElement> aFields = a.fields.keys.toList()..sort(compareElements);
|
| - List<FieldElement> bFields = b.fields.keys.toList()..sort(compareElements);
|
| -
|
| - r = compareLists(compareElements, aFields, bFields);
|
| - if (r != 0) return r;
|
| -
|
| - return compareLists(compareValues,
|
| - aFields.map((field) => a.fields[field]).toList(),
|
| - aFields.map((field) => b.fields[field]).toList());
|
| - }
|
| -
|
| - int visitType(TypeConstantValue a, TypeConstantValue b) {
|
| - int r = compareDartTypes(a.representedType, b.representedType);
|
| - if (r != 0) return r;
|
| - return compareDartTypes(a.type, b.type);
|
| - }
|
| -
|
| - int visitInterceptor(InterceptorConstantValue a, InterceptorConstantValue b) {
|
| - return compareDartTypes(a.dispatchedType, b.dispatchedType);
|
| - }
|
| -
|
| - int visitSynthetic(SyntheticConstantValue a, SyntheticConstantValue b) {
|
| - // [SyntheticConstantValue]s have abstract fields that are set only by
|
| - // convention. Lucky for us, they do not occur as top level constant, only
|
| - // as elements of a few constants. If this becomes a source of instability,
|
| - // we will need to add a total ordering on JavaScript ASTs including
|
| - // deferred elements.
|
| - SyntheticConstantKind aKind = a.kind;
|
| - SyntheticConstantKind bKind = b.kind;
|
| - int r = aKind.index - bKind.index;
|
| - if (r != 0) return r;
|
| - switch (a.kind) {
|
| - case SyntheticConstantKind.DUMMY_INTERCEPTOR:
|
| - case SyntheticConstantKind.EMPTY_VALUE:
|
| - // Never emitted.
|
| - return 0:
|
| -
|
| - case SyntheticConstantKind.TYPEVARIABLE_REFERENCE:
|
| - // An opaque deferred JS AST reference to a type in reflection data.
|
| - return 0;
|
| - case SyntheticConstantKind.NAME:
|
| - // An opaque deferred JS AST reference to a name.
|
| - return 0;
|
| - default:
|
| - // Should not happen.
|
| - throw 'unexpected SyntheticConstantKind $akind';
|
| - }
|
| - }
|
| -
|
| - int visitDeferred(DeferredConstantValue a, DeferredConstantValue b) {
|
| - int r = compareValues(a.referenced, b.referenced);
|
| - if (r != 0) return r;
|
| - return compareElements(a.prefix, b.prefix);
|
| - }
|
| -}
|
| -
|
| -class _KindVisitor implements ConstantValueVisitor<int, Null> {
|
| - const _KindVisitor();
|
| -
|
| - static const int FUNCTION = 1;
|
| - static const int NULL = 2;
|
| - static const int INT = 3;
|
| - static const int DOUBLE = 4;
|
| - static const int BOOL = 5;
|
| - static const int STRING = 6;
|
| - static const int LIST = 7;
|
| - static const int MAP = 8;
|
| - static const int CONSTRUCTED = 9;
|
| - static const int TYPE = 10;
|
| - static const int INTERCEPTOR = 11;
|
| - static const int SYNTHETIC = 12;
|
| - static const int DEFERRED = 13;
|
| -
|
| - static int kind(ConstantValue constant) =>
|
| - constant.accept(const _KindVisitor(), null);
|
| -
|
| - int visitFunction(FunctionConstantValue a, _) => FUNCTION;
|
| - int visitNull(NullConstantValue a, _) => NULL;
|
| - int visitInt(IntConstantValue a, _) => INT;
|
| - int visitDouble(DoubleConstantValue a, _) => DOUBLE;
|
| - int visitBool(BoolConstantValue a, _) => BOOL;
|
| - int visitString(StringConstantValue a, _) => STRING;
|
| - int visitList(ListConstantValue a, _) => LIST;
|
| - int visitMap(MapConstantValue a, _) => MAP;
|
| - int visitConstructed(ConstructedConstantValue a, _) => CONSTRUCTED;
|
| - int visitType(TypeConstantValue a, _) => TYPE;
|
| - int visitInterceptor(InterceptorConstantValue a, _) => INTERCEPTOR;
|
| - int visitSynthetic(SyntheticConstantValue a, _) => SYNTHETIC;
|
| - int visitDeferred(DeferredConstantValue a, _) => DEFERRED;
|
| -}
|
|
|