| 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 e40d5a6346b32d9d404a025f08d5d77429fd881c..686ddace2942891ce8275be382daed4f87c61773 100644
|
| --- a/pkg/compiler/lib/src/serialization/equivalence.dart
|
| +++ b/pkg/compiler/lib/src/serialization/equivalence.dart
|
| @@ -11,6 +11,9 @@ import '../constants/expressions.dart';
|
| import '../dart_types.dart';
|
| import '../elements/elements.dart';
|
| import '../elements/visitor.dart';
|
| +import '../js_backend/backend_serialization.dart'
|
| + show JavaScriptBackendSerializer;
|
| +import '../native/native.dart' show NativeBehavior;
|
| import '../resolution/access_semantics.dart';
|
| import '../resolution/send_structure.dart';
|
| import '../resolution/tree_elements.dart';
|
| @@ -828,6 +831,49 @@ class TreeElementsEquivalenceVisitor extends Visitor {
|
| a, b, 'isContinueTarget', a.isContinueTarget, b.isContinueTarget);
|
| }
|
|
|
| + bool testNativeData(Node node1, Node node2, String property, a, b) {
|
| + if (identical(a, b)) return true;
|
| + if (a == null || b == null) return false;
|
| + if (a is NativeBehavior && b is NativeBehavior) {
|
| + return strategy.test(a, b, 'codeTemplateText', a.codeTemplateText,
|
| + b.codeTemplateText) &&
|
| + strategy.test(a, b, 'isAllocation', a.isAllocation, b.isAllocation) &&
|
| + strategy.test(a, b, 'sideEffects', a.sideEffects, b.sideEffects) &&
|
| + strategy.test(
|
| + a, b, 'throwBehavior', a.throwBehavior, b.throwBehavior) &&
|
| + strategy.testTypeLists(
|
| + a,
|
| + b,
|
| + 'dartTypesReturned',
|
| + JavaScriptBackendSerializer.filterDartTypes(a.typesReturned),
|
| + JavaScriptBackendSerializer.filterDartTypes(b.typesReturned)) &&
|
| + strategy.testLists(
|
| + a,
|
| + b,
|
| + 'specialTypesReturned',
|
| + JavaScriptBackendSerializer.filterSpecialTypes(a.typesReturned),
|
| + JavaScriptBackendSerializer
|
| + .filterSpecialTypes(b.typesReturned)) &&
|
| + strategy.testTypeLists(
|
| + a,
|
| + b,
|
| + 'dartTypesInstantiated',
|
| + JavaScriptBackendSerializer.filterDartTypes(a.typesInstantiated),
|
| + JavaScriptBackendSerializer
|
| + .filterDartTypes(b.typesInstantiated)) &&
|
| + strategy.testLists(
|
| + a,
|
| + b,
|
| + 'specialTypesInstantiated',
|
| + JavaScriptBackendSerializer
|
| + .filterSpecialTypes(a.typesInstantiated),
|
| + JavaScriptBackendSerializer
|
| + .filterSpecialTypes(b.typesInstantiated)) &&
|
| + strategy.test(a, b, 'useGvn', a.useGvn, b.useGvn);
|
| + }
|
| + return true;
|
| + }
|
| +
|
| visitNode(Node node1) {
|
| if (!success) return;
|
| int index = indices1.nodeIndices[node1];
|
| @@ -852,7 +898,9 @@ class TreeElementsEquivalenceVisitor extends Visitor {
|
| node2,
|
| 'getTargetDefinition($index)',
|
| elements1.getTargetDefinition(node1),
|
| - elements2.getTargetDefinition(node2));
|
| + elements2.getTargetDefinition(node2)) &&
|
| + testNativeData(node1, node2, 'getNativeData($index)',
|
| + elements1.getNativeData(node1), elements2.getNativeData(node2));
|
|
|
| node1.visitChildren(this);
|
| }
|
|
|