| Index: pkg/compiler/lib/src/serialization/equivalence.dart
|
| diff --git a/pkg/compiler/lib/src/serialization/equivalence.dart b/pkg/compiler/lib/src/serialization/equivalence.dart
|
| index 5bc9d23bb8b85996ca9bbb5ae583135fbc08deae..f9b77dea1521200bc991e8442169a23dc28886e2 100644
|
| --- a/pkg/compiler/lib/src/serialization/equivalence.dart
|
| +++ b/pkg/compiler/lib/src/serialization/equivalence.dart
|
| @@ -19,11 +19,8 @@ bool equality(a, b) => a == b;
|
|
|
| /// Returns `true` if the elements in [a] and [b] are pair-wise equivalent
|
| /// according to [elementEquivalence].
|
| -bool areListsEquivalent(
|
| - List a,
|
| - List b,
|
| +bool areListsEquivalent(List a, List b,
|
| [bool elementEquivalence(a, b) = equality]) {
|
| -
|
| if (a.length != b.length) return false;
|
| for (int i = 0; i < a.length && i < b.length; i++) {
|
| if (!elementEquivalence(a[i], b[i])) {
|
| @@ -35,9 +32,7 @@ bool areListsEquivalent(
|
|
|
| /// Returns `true` if the elements in [a] and [b] are equivalent as sets using
|
| /// [elementEquivalence] to determine element equivalence.
|
| -bool areSetsEquivalent(
|
| - Iterable set1,
|
| - Iterable set2,
|
| +bool areSetsEquivalent(Iterable set1, Iterable set2,
|
| [bool elementEquivalence(a, b) = equality]) {
|
| Set remaining = set2.toSet();
|
| for (var element1 in set1) {
|
| @@ -88,23 +83,23 @@ bool areTypeListsEquivalent(List<DartType> a, List<DartType> b) {
|
| }
|
|
|
| /// Returns `true` if the lists of constants, [a] and [b], are equivalent.
|
| -bool areConstantListsEquivalent(List<ConstantExpression> a,
|
| - List<ConstantExpression> b) {
|
| +bool areConstantListsEquivalent(
|
| + List<ConstantExpression> a, List<ConstantExpression> b) {
|
| return areListsEquivalent(a, b, areConstantsEquivalent);
|
| }
|
|
|
| /// Returns `true` if the selectors [a] and [b] are equivalent.
|
| bool areSelectorsEquivalent(Selector a, Selector b) {
|
| return a.kind == b.kind &&
|
| - a.callStructure == b.callStructure &&
|
| - areNamesEquivalent(a.memberName, b.memberName);
|
| + a.callStructure == b.callStructure &&
|
| + areNamesEquivalent(a.memberName, b.memberName);
|
| }
|
|
|
| /// Returns `true` if the names [a] and [b] are equivalent.
|
| bool areNamesEquivalent(Name a, Name b) {
|
| return a.text == b.text &&
|
| - a.isSetter == b.isSetter &&
|
| - areElementsEquivalent(a.library, b.library);
|
| + a.isSetter == b.isSetter &&
|
| + areElementsEquivalent(a.library, b.library);
|
| }
|
|
|
| /// Returns `true` if the dynamic uses [a] and [b] are equivalent.
|
| @@ -114,28 +109,26 @@ bool areDynamicUsesEquivalent(DynamicUse a, DynamicUse b) {
|
|
|
| /// Returns `true` if the static uses [a] and [b] are equivalent.
|
| bool areStaticUsesEquivalent(StaticUse a, StaticUse b) {
|
| - return a.kind == b.kind &&
|
| - areElementsEquivalent(a.element, b.element);
|
| + return a.kind == b.kind && areElementsEquivalent(a.element, b.element);
|
| }
|
|
|
| /// Returns `true` if the type uses [a] and [b] are equivalent.
|
| bool areTypeUsesEquivalent(TypeUse a, TypeUse b) {
|
| - return a.kind == b.kind &&
|
| - areTypesEquivalent(a.type, b.type);
|
| + return a.kind == b.kind && areTypesEquivalent(a.type, b.type);
|
| }
|
|
|
| /// Returns `true` if the list literal uses [a] and [b] are equivalent.
|
| bool areListLiteralUsesEquivalent(ListLiteralUse a, ListLiteralUse b) {
|
| return areTypesEquivalent(a.type, b.type) &&
|
| - a.isConstant == b.isConstant &&
|
| - a.isEmpty == b.isEmpty;
|
| + a.isConstant == b.isConstant &&
|
| + a.isEmpty == b.isEmpty;
|
| }
|
|
|
| /// Returns `true` if the map literal uses [a] and [b] are equivalent.
|
| bool areMapLiteralUsesEquivalent(MapLiteralUse a, MapLiteralUse b) {
|
| return areTypesEquivalent(a.type, b.type) &&
|
| - a.isConstant == b.isConstant &&
|
| - a.isEmpty == b.isEmpty;
|
| + a.isConstant == b.isConstant &&
|
| + a.isEmpty == b.isEmpty;
|
| }
|
|
|
| /// Strategy for testing equivalence.
|
| @@ -149,50 +142,41 @@ class TestStrategy {
|
| }
|
|
|
| bool testLists(
|
| - Object object1, Object object2, String property,
|
| - List list1, List list2,
|
| + Object object1, Object object2, String property, List list1, List list2,
|
| [bool elementEquivalence(a, b) = equality]) {
|
| return areListsEquivalent(list1, list2, elementEquivalence);
|
| }
|
|
|
| bool testSets(
|
| - var object1, var object2, String property,
|
| - Iterable set1, Iterable set2,
|
| + var object1, var object2, String property, Iterable set1, Iterable set2,
|
| [bool elementEquivalence(a, b) = equality]) {
|
| return areSetsEquivalent(set1, set2, elementEquivalence);
|
| }
|
|
|
| - bool testElements(
|
| - Object object1, Object object2, String property,
|
| + bool testElements(Object object1, Object object2, String property,
|
| Element element1, Element element2) {
|
| return areElementsEquivalent(element1, element2);
|
| }
|
|
|
| - bool testTypes(
|
| - Object object1, Object object2, String property,
|
| + bool testTypes(Object object1, Object object2, String property,
|
| DartType type1, DartType type2) {
|
| return areTypesEquivalent(type1, type2);
|
| }
|
|
|
| - bool testConstants(
|
| - Object object1, Object object2, String property,
|
| + bool testConstants(Object object1, Object object2, String property,
|
| ConstantExpression exp1, ConstantExpression exp2) {
|
| return areConstantsEquivalent(exp1, exp2);
|
| }
|
|
|
| - bool testTypeLists(
|
| - Object object1, Object object2, String property,
|
| + bool testTypeLists(Object object1, Object object2, String property,
|
| List<DartType> list1, List<DartType> list2) {
|
| return areTypeListsEquivalent(list1, list2);
|
| }
|
|
|
| - bool testConstantLists(
|
| - Object object1, Object object2, String property,
|
| - List<ConstantExpression> list1,
|
| - List<ConstantExpression> list2) {
|
| + bool testConstantLists(Object object1, Object object2, String property,
|
| + List<ConstantExpression> list1, List<ConstantExpression> list2) {
|
| return areConstantListsEquivalent(list1, list2);
|
| }
|
| -
|
| }
|
|
|
| /// Visitor that checks for equivalence of [Element]s.
|
| @@ -212,10 +196,8 @@ class ElementIdentityEquivalence extends BaseElementVisitor<bool, Element> {
|
| if (element1 == element2) {
|
| return true;
|
| }
|
| - return
|
| - strategy.test(
|
| - element1, element2, 'kind',
|
| - element1.kind, element2.kind) &&
|
| + return strategy.test(
|
| + element1, element2, 'kind', element1.kind, element2.kind) &&
|
| element1.accept(this, element2);
|
| }
|
|
|
| @@ -226,34 +208,28 @@ class ElementIdentityEquivalence extends BaseElementVisitor<bool, Element> {
|
|
|
| @override
|
| bool visitLibraryElement(LibraryElement element1, LibraryElement element2) {
|
| - return
|
| - strategy.test(element1, element2,
|
| - 'canonicalUri',
|
| - element1.canonicalUri, element2.canonicalUri);
|
| + return strategy.test(element1, element2, 'canonicalUri',
|
| + element1.canonicalUri, element2.canonicalUri);
|
| }
|
|
|
| @override
|
| - bool visitCompilationUnitElement(CompilationUnitElement element1,
|
| - CompilationUnitElement element2) {
|
| - return
|
| - strategy.test(element1, element2,
|
| - 'name',
|
| - element1.name, element2.name) &&
|
| + bool visitCompilationUnitElement(
|
| + CompilationUnitElement element1, CompilationUnitElement element2) {
|
| + return strategy.test(
|
| + element1, element2, 'name', element1.name, element2.name) &&
|
| visit(element1.library, element2.library);
|
| }
|
|
|
| @override
|
| bool visitClassElement(ClassElement element1, ClassElement element2) {
|
| - return
|
| - strategy.test(element1, element2,
|
| - 'name',
|
| - element1.name, element2.name) &&
|
| + return strategy.test(
|
| + element1, element2, 'name', element1.name, element2.name) &&
|
| visit(element1.library, element2.library);
|
| }
|
|
|
| bool checkMembers(Element element1, Element element2) {
|
| - if (!strategy.test(element1, element2, 'name',
|
| - element1.name, element2.name)) {
|
| + if (!strategy.test(
|
| + element1, element2, 'name', element1.name, element2.name)) {
|
| return false;
|
| }
|
| if (element1.enclosingClass != null || element2.enclosingClass != null) {
|
| @@ -269,95 +245,81 @@ class ElementIdentityEquivalence extends BaseElementVisitor<bool, Element> {
|
| }
|
|
|
| @override
|
| - bool visitConstructorElement(ConstructorElement element1,
|
| - ConstructorElement element2) {
|
| + bool visitConstructorElement(
|
| + ConstructorElement element1, ConstructorElement element2) {
|
| return checkMembers(element1, element2);
|
| }
|
|
|
| @override
|
| - bool visitMethodElement(MethodElement element1,
|
| - MethodElement element2) {
|
| + bool visitMethodElement(MethodElement element1, MethodElement element2) {
|
| return checkMembers(element1, element2);
|
| }
|
|
|
| @override
|
| - bool visitGetterElement(GetterElement element1,
|
| - GetterElement element2) {
|
| + bool visitGetterElement(GetterElement element1, GetterElement element2) {
|
| return checkMembers(element1, element2);
|
| }
|
|
|
| @override
|
| - bool visitSetterElement(SetterElement element1,
|
| - SetterElement element2) {
|
| + bool visitSetterElement(SetterElement element1, SetterElement element2) {
|
| return checkMembers(element1, element2);
|
| }
|
|
|
| @override
|
| - bool visitLocalFunctionElement(LocalFunctionElement element1,
|
| - LocalFunctionElement element2) {
|
| + bool visitLocalFunctionElement(
|
| + LocalFunctionElement element1, LocalFunctionElement element2) {
|
| // TODO(johnniwinther): Define an equivalence on locals.
|
| return checkMembers(element1.memberContext, element2.memberContext);
|
| }
|
|
|
| - bool visitAbstractFieldElement(AbstractFieldElement element1,
|
| - AbstractFieldElement element2) {
|
| + bool visitAbstractFieldElement(
|
| + AbstractFieldElement element1, AbstractFieldElement element2) {
|
| return checkMembers(element1, element2);
|
| }
|
|
|
| @override
|
| - bool visitTypeVariableElement(TypeVariableElement element1,
|
| - TypeVariableElement element2) {
|
| - return
|
| - strategy.test(
|
| - element1, element2, 'name',
|
| - element1.name, element2.name) &&
|
| + bool visitTypeVariableElement(
|
| + TypeVariableElement element1, TypeVariableElement element2) {
|
| + return strategy.test(
|
| + element1, element2, 'name', element1.name, element2.name) &&
|
| visit(element1.typeDeclaration, element2.typeDeclaration);
|
| }
|
|
|
| @override
|
| bool visitTypedefElement(TypedefElement element1, TypedefElement element2) {
|
| - return
|
| - strategy.test(
|
| - element1, element2, 'name',
|
| - element1.name, element2.name) &&
|
| + return strategy.test(
|
| + element1, element2, 'name', element1.name, element2.name) &&
|
| visit(element1.library, element2.library);
|
| }
|
|
|
| @override
|
| - bool visitParameterElement(ParameterElement element1,
|
| - ParameterElement element2) {
|
| - return
|
| - strategy.test(
|
| - element1, element2, 'name',
|
| - element1.name, element2.name) &&
|
| + bool visitParameterElement(
|
| + ParameterElement element1, ParameterElement element2) {
|
| + return strategy.test(
|
| + element1, element2, 'name', element1.name, element2.name) &&
|
| visit(element1.functionDeclaration, element2.functionDeclaration);
|
| }
|
|
|
| @override
|
| bool visitImportElement(ImportElement element1, ImportElement element2) {
|
| - return
|
| - visit(element1.importedLibrary, element2.importedLibrary) &&
|
| + return visit(element1.importedLibrary, element2.importedLibrary) &&
|
| visit(element1.library, element2.library);
|
| }
|
|
|
| @override
|
| bool visitExportElement(ExportElement element1, ExportElement element2) {
|
| - return
|
| - visit(element1.exportedLibrary, element2.exportedLibrary) &&
|
| + return visit(element1.exportedLibrary, element2.exportedLibrary) &&
|
| visit(element1.library, element2.library);
|
| }
|
|
|
| @override
|
| bool visitPrefixElement(PrefixElement element1, PrefixElement element2) {
|
| - return
|
| - strategy.test(
|
| - element1, element2, 'name',
|
| - element1.name, element2.name) &&
|
| + return strategy.test(
|
| + element1, element2, 'name', element1.name, element2.name) &&
|
| visit(element1.library, element2.library);
|
| }
|
| }
|
|
|
| -
|
| /// Visitor that checks for equivalence of [DartType]s.
|
| class TypeEquivalence implements DartTypeVisitor<bool, DartType> {
|
| final TestStrategy strategy;
|
| @@ -365,8 +327,7 @@ class TypeEquivalence implements DartTypeVisitor<bool, DartType> {
|
| const TypeEquivalence([this.strategy = const TestStrategy()]);
|
|
|
| bool visit(DartType type1, DartType type2) {
|
| - return
|
| - strategy.test(type1, type2, 'kind', type1.kind, type2.kind) &&
|
| + return strategy.test(type1, type2, 'kind', type1.kind, type2.kind) &&
|
| type1.accept(this, type2);
|
| }
|
|
|
| @@ -375,29 +336,21 @@ class TypeEquivalence implements DartTypeVisitor<bool, DartType> {
|
|
|
| @override
|
| bool visitFunctionType(FunctionType type, FunctionType other) {
|
| - return
|
| - strategy.testTypeLists(
|
| - type, other, 'parameterTypes',
|
| + return strategy.testTypeLists(type, other, 'parameterTypes',
|
| type.parameterTypes, other.parameterTypes) &&
|
| - strategy.testTypeLists(
|
| - type, other, 'optionalParameterTypes',
|
| + strategy.testTypeLists(type, other, 'optionalParameterTypes',
|
| type.optionalParameterTypes, other.optionalParameterTypes) &&
|
| - strategy.testTypeLists(
|
| - type, other, 'namedParameterTypes',
|
| + strategy.testTypeLists(type, other, 'namedParameterTypes',
|
| type.namedParameterTypes, other.namedParameterTypes) &&
|
| - strategy.testLists(
|
| - type, other, 'namedParameters',
|
| - type.namedParameters, other.namedParameters);
|
| + strategy.testLists(type, other, 'namedParameters', type.namedParameters,
|
| + other.namedParameters);
|
| }
|
|
|
| bool visitGenericType(GenericType type, GenericType other) {
|
| - return
|
| - strategy.testElements(
|
| - type, other, 'element',
|
| - type.element, other.element) &&
|
| - strategy.testTypeLists(
|
| - type, other, 'typeArguments',
|
| - type.typeArguments, other.typeArguments);
|
| + return strategy.testElements(
|
| + type, other, 'element', type.element, other.element) &&
|
| + strategy.testTypeLists(type, other, 'typeArguments', type.typeArguments,
|
| + other.typeArguments);
|
| }
|
|
|
| @override
|
| @@ -410,10 +363,8 @@ class TypeEquivalence implements DartTypeVisitor<bool, DartType> {
|
|
|
| @override
|
| bool visitTypeVariableType(TypeVariableType type, TypeVariableType other) {
|
| - return
|
| - strategy.testElements(
|
| - type, other, 'element',
|
| - type.element, other.element);
|
| + return strategy.testElements(
|
| + type, other, 'element', type.element, other.element);
|
| }
|
|
|
| @override
|
| @@ -440,34 +391,30 @@ class ConstantEquivalence
|
| @override
|
| bool visit(ConstantExpression exp1, ConstantExpression exp2) {
|
| if (identical(exp1, exp2)) return true;
|
| - return
|
| - strategy.test(exp1, exp2, 'kind', exp1.kind, exp2.kind) &&
|
| + return strategy.test(exp1, exp2, 'kind', exp1.kind, exp2.kind) &&
|
| exp1.accept(this, exp2);
|
| }
|
|
|
| @override
|
| - bool visitBinary(BinaryConstantExpression exp1,
|
| - BinaryConstantExpression exp2) {
|
| - return
|
| - strategy.test(exp1, exp2, 'operator', exp1.operator, exp2.operator) &&
|
| + bool visitBinary(
|
| + BinaryConstantExpression exp1, BinaryConstantExpression exp2) {
|
| + return strategy.test(
|
| + exp1, exp2, 'operator', exp1.operator, exp2.operator) &&
|
| strategy.testConstants(exp1, exp2, 'left', exp1.left, exp2.left) &&
|
| strategy.testConstants(exp1, exp2, 'right', exp1.right, exp2.right);
|
| }
|
|
|
| @override
|
| - bool visitConcatenate(ConcatenateConstantExpression exp1,
|
| - ConcatenateConstantExpression exp2) {
|
| - return
|
| - strategy.testConstantLists(
|
| - exp1, exp2, 'expressions',
|
| - exp1.expressions, exp2.expressions);
|
| + bool visitConcatenate(
|
| + ConcatenateConstantExpression exp1, ConcatenateConstantExpression exp2) {
|
| + return strategy.testConstantLists(
|
| + exp1, exp2, 'expressions', exp1.expressions, exp2.expressions);
|
| }
|
|
|
| @override
|
| - bool visitConditional(ConditionalConstantExpression exp1,
|
| - ConditionalConstantExpression exp2) {
|
| - return
|
| - strategy.testConstants(
|
| + bool visitConditional(
|
| + ConditionalConstantExpression exp1, ConditionalConstantExpression exp2) {
|
| + return strategy.testConstants(
|
| exp1, exp2, 'condition', exp1.condition, exp2.condition) &&
|
| strategy.testConstants(
|
| exp1, exp2, 'trueExp', exp1.trueExp, exp2.trueExp) &&
|
| @@ -476,62 +423,43 @@ class ConstantEquivalence
|
| }
|
|
|
| @override
|
| - bool visitConstructed(ConstructedConstantExpression exp1,
|
| - ConstructedConstantExpression exp2) {
|
| - return
|
| - strategy.testTypes(
|
| - exp1, exp2, 'type',
|
| - exp1.type, exp2.type) &&
|
| - strategy.testElements(
|
| - exp1, exp2, 'target',
|
| - exp1.target, exp2.target) &&
|
| + bool visitConstructed(
|
| + ConstructedConstantExpression exp1, ConstructedConstantExpression exp2) {
|
| + return strategy.testTypes(exp1, exp2, 'type', exp1.type, exp2.type) &&
|
| + strategy.testElements(exp1, exp2, 'target', exp1.target, exp2.target) &&
|
| strategy.testConstantLists(
|
| - exp1, exp2, 'arguments',
|
| - exp1.arguments, exp2.arguments) &&
|
| - strategy.test(exp1, exp2, 'callStructure',
|
| - exp1.callStructure, exp2.callStructure);
|
| + exp1, exp2, 'arguments', exp1.arguments, exp2.arguments) &&
|
| + strategy.test(exp1, exp2, 'callStructure', exp1.callStructure,
|
| + exp2.callStructure);
|
| }
|
|
|
| @override
|
| - bool visitFunction(FunctionConstantExpression exp1,
|
| - FunctionConstantExpression exp2) {
|
| - return
|
| - strategy.testElements(
|
| - exp1, exp2, 'element',
|
| - exp1.element, exp2.element);
|
| + bool visitFunction(
|
| + FunctionConstantExpression exp1, FunctionConstantExpression exp2) {
|
| + return strategy.testElements(
|
| + exp1, exp2, 'element', exp1.element, exp2.element);
|
| }
|
|
|
| @override
|
| - bool visitIdentical(IdenticalConstantExpression exp1,
|
| - IdenticalConstantExpression exp2) {
|
| - return
|
| - strategy.testConstants(exp1, exp2, 'left', exp1.left, exp2.left) &&
|
| + bool visitIdentical(
|
| + IdenticalConstantExpression exp1, IdenticalConstantExpression exp2) {
|
| + return strategy.testConstants(exp1, exp2, 'left', exp1.left, exp2.left) &&
|
| strategy.testConstants(exp1, exp2, 'right', exp1.right, exp2.right);
|
| }
|
|
|
| @override
|
| bool visitList(ListConstantExpression exp1, ListConstantExpression exp2) {
|
| - return
|
| - strategy.testTypes(
|
| - exp1, exp2, 'type',
|
| - exp1.type, exp2.type) &&
|
| + return strategy.testTypes(exp1, exp2, 'type', exp1.type, exp2.type) &&
|
| strategy.testConstantLists(
|
| - exp1, exp2, 'values',
|
| - exp1.values, exp2.values);
|
| + exp1, exp2, 'values', exp1.values, exp2.values);
|
| }
|
|
|
| @override
|
| bool visitMap(MapConstantExpression exp1, MapConstantExpression exp2) {
|
| - return
|
| - strategy.testTypes(
|
| - exp1, exp2, 'type',
|
| - exp1.type, exp2.type) &&
|
| + return strategy.testTypes(exp1, exp2, 'type', exp1.type, exp2.type) &&
|
| + strategy.testConstantLists(exp1, exp2, 'keys', exp1.keys, exp2.keys) &&
|
| strategy.testConstantLists(
|
| - exp1, exp2, 'keys',
|
| - exp1.keys, exp2.keys) &&
|
| - strategy.testConstantLists(
|
| - exp1, exp2, 'values',
|
| - exp1.values, exp2.values);
|
| + exp1, exp2, 'values', exp1.values, exp2.values);
|
| }
|
|
|
| @override
|
| @@ -540,14 +468,14 @@ class ConstantEquivalence
|
| }
|
|
|
| @override
|
| - bool visitPositional(PositionalArgumentReference exp1,
|
| - PositionalArgumentReference exp2) {
|
| + bool visitPositional(
|
| + PositionalArgumentReference exp1, PositionalArgumentReference exp2) {
|
| return strategy.test(exp1, exp2, 'index', exp1.index, exp2.index);
|
| }
|
|
|
| @override
|
| - bool visitSymbol(SymbolConstantExpression exp1,
|
| - SymbolConstantExpression exp2) {
|
| + bool visitSymbol(
|
| + SymbolConstantExpression exp1, SymbolConstantExpression exp2) {
|
| // TODO: implement visitSymbol
|
| return true;
|
| }
|
| @@ -559,44 +487,36 @@ class ConstantEquivalence
|
|
|
| @override
|
| bool visitUnary(UnaryConstantExpression exp1, UnaryConstantExpression exp2) {
|
| - return
|
| - strategy.test(exp1, exp2, 'operator', exp1.operator, exp2.operator) &&
|
| + return strategy.test(
|
| + exp1, exp2, 'operator', exp1.operator, exp2.operator) &&
|
| strategy.testConstants(
|
| exp1, exp2, 'expression', exp1.expression, exp2.expression);
|
| }
|
|
|
| @override
|
| - bool visitVariable(VariableConstantExpression exp1,
|
| - VariableConstantExpression exp2) {
|
| - return
|
| - strategy.testElements(
|
| - exp1, exp2, 'element',
|
| - exp1.element, exp2.element);
|
| + bool visitVariable(
|
| + VariableConstantExpression exp1, VariableConstantExpression exp2) {
|
| + return strategy.testElements(
|
| + exp1, exp2, 'element', exp1.element, exp2.element);
|
| }
|
|
|
| @override
|
| bool visitBool(BoolConstantExpression exp1, BoolConstantExpression exp2) {
|
| - return
|
| - strategy.test(
|
| - exp1, exp2, 'primitiveValue',
|
| - exp1.primitiveValue, exp2.primitiveValue);
|
| + return strategy.test(
|
| + exp1, exp2, 'primitiveValue', exp1.primitiveValue, exp2.primitiveValue);
|
| }
|
|
|
| @override
|
| - bool visitDouble(DoubleConstantExpression exp1,
|
| - DoubleConstantExpression exp2) {
|
| - return
|
| - strategy.test(
|
| - exp1, exp2, 'primitiveValue',
|
| - exp1.primitiveValue, exp2.primitiveValue);
|
| + bool visitDouble(
|
| + DoubleConstantExpression exp1, DoubleConstantExpression exp2) {
|
| + return strategy.test(
|
| + exp1, exp2, 'primitiveValue', exp1.primitiveValue, exp2.primitiveValue);
|
| }
|
|
|
| @override
|
| bool visitInt(IntConstantExpression exp1, IntConstantExpression exp2) {
|
| - return
|
| - strategy.test(
|
| - exp1, exp2, 'primitiveValue',
|
| - exp1.primitiveValue, exp2.primitiveValue);
|
| + return strategy.test(
|
| + exp1, exp2, 'primitiveValue', exp1.primitiveValue, exp2.primitiveValue);
|
| }
|
|
|
| @override
|
| @@ -605,57 +525,46 @@ class ConstantEquivalence
|
| }
|
|
|
| @override
|
| - bool visitString(StringConstantExpression exp1,
|
| - StringConstantExpression exp2) {
|
| - return
|
| - strategy.test(
|
| - exp1, exp2, 'primitiveValue',
|
| - exp1.primitiveValue, exp2.primitiveValue);
|
| + bool visitString(
|
| + StringConstantExpression exp1, StringConstantExpression exp2) {
|
| + return strategy.test(
|
| + exp1, exp2, 'primitiveValue', exp1.primitiveValue, exp2.primitiveValue);
|
| }
|
|
|
| @override
|
| bool visitBoolFromEnvironment(BoolFromEnvironmentConstantExpression exp1,
|
| - BoolFromEnvironmentConstantExpression exp2) {
|
| - return
|
| - strategy.testConstants(exp1, exp2, 'name', exp1.name, exp2.name) &&
|
| + BoolFromEnvironmentConstantExpression exp2) {
|
| + return strategy.testConstants(exp1, exp2, 'name', exp1.name, exp2.name) &&
|
| strategy.testConstants(
|
| - exp1, exp2, 'defaultValue',
|
| - exp1.defaultValue, exp2.defaultValue);
|
| + exp1, exp2, 'defaultValue', exp1.defaultValue, exp2.defaultValue);
|
| }
|
|
|
| @override
|
| bool visitIntFromEnvironment(IntFromEnvironmentConstantExpression exp1,
|
| - IntFromEnvironmentConstantExpression exp2) {
|
| - return
|
| - strategy.testConstants(exp1, exp2, 'name', exp1.name, exp2.name) &&
|
| + IntFromEnvironmentConstantExpression exp2) {
|
| + return strategy.testConstants(exp1, exp2, 'name', exp1.name, exp2.name) &&
|
| strategy.testConstants(
|
| - exp1, exp2, 'defaultValue',
|
| - exp1.defaultValue, exp2.defaultValue);
|
| + exp1, exp2, 'defaultValue', exp1.defaultValue, exp2.defaultValue);
|
| }
|
|
|
| @override
|
| - bool visitStringFromEnvironment(
|
| - StringFromEnvironmentConstantExpression exp1,
|
| + bool visitStringFromEnvironment(StringFromEnvironmentConstantExpression exp1,
|
| StringFromEnvironmentConstantExpression exp2) {
|
| - return
|
| - strategy.testConstants(exp1, exp2, 'name', exp1.name, exp2.name) &&
|
| + return strategy.testConstants(exp1, exp2, 'name', exp1.name, exp2.name) &&
|
| strategy.testConstants(
|
| - exp1, exp2, 'defaultValue',
|
| - exp1.defaultValue, exp2.defaultValue);
|
| + exp1, exp2, 'defaultValue', exp1.defaultValue, exp2.defaultValue);
|
| }
|
|
|
| @override
|
| bool visitStringLength(StringLengthConstantExpression exp1,
|
| - StringLengthConstantExpression exp2) {
|
| - return
|
| - strategy.testConstants(
|
| - exp1, exp2, 'expression',
|
| - exp1.expression, exp2.expression);
|
| + StringLengthConstantExpression exp2) {
|
| + return strategy.testConstants(
|
| + exp1, exp2, 'expression', exp1.expression, exp2.expression);
|
| }
|
|
|
| @override
|
| - bool visitDeferred(DeferredConstantExpression exp1,
|
| - DeferredConstantExpression exp2) {
|
| + bool visitDeferred(
|
| + DeferredConstantExpression exp1, DeferredConstantExpression exp2) {
|
| // TODO: implement visitDeferred
|
| return true;
|
| }
|
| @@ -663,38 +572,27 @@ class ConstantEquivalence
|
|
|
| /// Tests the equivalence of [impact1] and [impact2] using [strategy].
|
| bool testResolutionImpactEquivalence(
|
| - ResolutionImpact impact1,
|
| - ResolutionImpact impact2,
|
| + ResolutionImpact impact1, ResolutionImpact impact2,
|
| [TestStrategy strategy = const TestStrategy()]) {
|
| - return
|
| - strategy.testSets(
|
| - impact1, impact2, 'constSymbolNames',
|
| + return strategy.testSets(impact1, impact2, 'constSymbolNames',
|
| impact1.constSymbolNames, impact2.constSymbolNames) &&
|
| strategy.testSets(
|
| - impact1, impact2, 'constantLiterals',
|
| - impact1.constantLiterals, impact2.constantLiterals,
|
| + impact1,
|
| + impact2,
|
| + 'constantLiterals',
|
| + impact1.constantLiterals,
|
| + impact2.constantLiterals,
|
| areConstantsEquivalent) &&
|
| + strategy.testSets(impact1, impact2, 'dynamicUses', impact1.dynamicUses,
|
| + impact2.dynamicUses, areDynamicUsesEquivalent) &&
|
| strategy.testSets(
|
| - impact1, impact2, 'dynamicUses',
|
| - impact1.dynamicUses, impact2.dynamicUses,
|
| - areDynamicUsesEquivalent) &&
|
| - strategy.testSets(
|
| - impact1, impact2, 'features',
|
| - impact1.features, impact2.features) &&
|
| - strategy.testSets(
|
| - impact1, impact2, 'listLiterals',
|
| - impact1.listLiterals, impact2.listLiterals,
|
| - areListLiteralUsesEquivalent) &&
|
| - strategy.testSets(
|
| - impact1, impact2, 'mapLiterals',
|
| - impact1.mapLiterals, impact2.mapLiterals,
|
| - areMapLiteralUsesEquivalent) &&
|
| - strategy.testSets(
|
| - impact1, impact2, 'staticUses',
|
| - impact1.staticUses, impact2.staticUses,
|
| - areStaticUsesEquivalent) &&
|
| - strategy.testSets(
|
| - impact1, impact2, 'typeUses',
|
| - impact1.typeUses, impact2.typeUses,
|
| - areTypeUsesEquivalent);
|
| + impact1, impact2, 'features', impact1.features, impact2.features) &&
|
| + strategy.testSets(impact1, impact2, 'listLiterals', impact1.listLiterals,
|
| + impact2.listLiterals, areListLiteralUsesEquivalent) &&
|
| + strategy.testSets(impact1, impact2, 'mapLiterals', impact1.mapLiterals,
|
| + impact2.mapLiterals, areMapLiteralUsesEquivalent) &&
|
| + strategy.testSets(impact1, impact2, 'staticUses', impact1.staticUses,
|
| + impact2.staticUses, areStaticUsesEquivalent) &&
|
| + strategy.testSets(impact1, impact2, 'typeUses', impact1.typeUses,
|
| + impact2.typeUses, areTypeUsesEquivalent);
|
| }
|
|
|