| OLD | NEW |
| 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 /// Functions for asserting equivalence across serialization. | 5 /// Functions for asserting equivalence across serialization. |
| 6 | 6 |
| 7 library dart2js.serialization.equivalence; | 7 library dart2js.serialization.equivalence; |
| 8 | 8 |
| 9 import '../common/resolution.dart'; | 9 import '../common/resolution.dart'; |
| 10 import '../constants/expressions.dart'; | 10 import '../constants/expressions.dart'; |
| 11 import '../dart_types.dart'; | 11 import '../dart_types.dart'; |
| 12 import '../elements/elements.dart'; | 12 import '../elements/elements.dart'; |
| 13 import '../elements/visitor.dart'; | 13 import '../elements/visitor.dart'; |
| 14 import '../js_backend/backend_serialization.dart' |
| 15 show JavaScriptBackendSerializer; |
| 16 import '../native/native.dart' show NativeBehavior; |
| 14 import '../resolution/access_semantics.dart'; | 17 import '../resolution/access_semantics.dart'; |
| 15 import '../resolution/send_structure.dart'; | 18 import '../resolution/send_structure.dart'; |
| 16 import '../resolution/tree_elements.dart'; | 19 import '../resolution/tree_elements.dart'; |
| 17 import '../tokens/token.dart'; | 20 import '../tokens/token.dart'; |
| 18 import '../tree/nodes.dart'; | 21 import '../tree/nodes.dart'; |
| 19 import '../universe/selector.dart'; | 22 import '../universe/selector.dart'; |
| 20 import '../universe/use.dart'; | 23 import '../universe/use.dart'; |
| 21 import '../util/util.dart'; | 24 import '../util/util.dart'; |
| 22 import 'resolved_ast_serialization.dart'; | 25 import 'resolved_ast_serialization.dart'; |
| 23 | 26 |
| (...skipping 797 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 821 indices2.nodeIndices[b.label]) && | 824 indices2.nodeIndices[b.label]) && |
| 822 strategy.test(a, b, 'labelName', a.labelName, b.labelName) && | 825 strategy.test(a, b, 'labelName', a.labelName, b.labelName) && |
| 823 strategy.test(a, b, 'target', indices1.nodeIndices[a.target.statement], | 826 strategy.test(a, b, 'target', indices1.nodeIndices[a.target.statement], |
| 824 indices2.nodeIndices[b.target.statement]) && | 827 indices2.nodeIndices[b.target.statement]) && |
| 825 strategy.test( | 828 strategy.test( |
| 826 a, b, 'isBreakTarget', a.isBreakTarget, b.isBreakTarget) && | 829 a, b, 'isBreakTarget', a.isBreakTarget, b.isBreakTarget) && |
| 827 strategy.test( | 830 strategy.test( |
| 828 a, b, 'isContinueTarget', a.isContinueTarget, b.isContinueTarget); | 831 a, b, 'isContinueTarget', a.isContinueTarget, b.isContinueTarget); |
| 829 } | 832 } |
| 830 | 833 |
| 834 bool testNativeData(Node node1, Node node2, String property, a, b) { |
| 835 if (identical(a, b)) return true; |
| 836 if (a == null || b == null) return false; |
| 837 if (a is NativeBehavior && b is NativeBehavior) { |
| 838 return strategy.test(a, b, 'codeTemplateText', a.codeTemplateText, |
| 839 b.codeTemplateText) && |
| 840 strategy.test(a, b, 'isAllocation', a.isAllocation, b.isAllocation) && |
| 841 strategy.test(a, b, 'sideEffects', a.sideEffects, b.sideEffects) && |
| 842 strategy.test( |
| 843 a, b, 'throwBehavior', a.throwBehavior, b.throwBehavior) && |
| 844 strategy.testTypeLists( |
| 845 a, |
| 846 b, |
| 847 'dartTypesReturned', |
| 848 JavaScriptBackendSerializer.filterDartTypes(a.typesReturned), |
| 849 JavaScriptBackendSerializer.filterDartTypes(b.typesReturned)) && |
| 850 strategy.testLists( |
| 851 a, |
| 852 b, |
| 853 'specialTypesReturned', |
| 854 JavaScriptBackendSerializer.filterSpecialTypes(a.typesReturned), |
| 855 JavaScriptBackendSerializer |
| 856 .filterSpecialTypes(b.typesReturned)) && |
| 857 strategy.testTypeLists( |
| 858 a, |
| 859 b, |
| 860 'dartTypesInstantiated', |
| 861 JavaScriptBackendSerializer.filterDartTypes(a.typesInstantiated), |
| 862 JavaScriptBackendSerializer |
| 863 .filterDartTypes(b.typesInstantiated)) && |
| 864 strategy.testLists( |
| 865 a, |
| 866 b, |
| 867 'specialTypesInstantiated', |
| 868 JavaScriptBackendSerializer |
| 869 .filterSpecialTypes(a.typesInstantiated), |
| 870 JavaScriptBackendSerializer |
| 871 .filterSpecialTypes(b.typesInstantiated)) && |
| 872 strategy.test(a, b, 'useGvn', a.useGvn, b.useGvn); |
| 873 } |
| 874 return true; |
| 875 } |
| 876 |
| 831 visitNode(Node node1) { | 877 visitNode(Node node1) { |
| 832 if (!success) return; | 878 if (!success) return; |
| 833 int index = indices1.nodeIndices[node1]; | 879 int index = indices1.nodeIndices[node1]; |
| 834 Node node2 = indices2.nodeList[index]; | 880 Node node2 = indices2.nodeList[index]; |
| 835 success = strategy.testElements( | 881 success = strategy.testElements( |
| 836 node1, node2, '[$index]', elements1[node1], elements2[node2]) && | 882 node1, node2, '[$index]', elements1[node1], elements2[node2]) && |
| 837 strategy.testTypes(node1, node2, 'getType($index)', | 883 strategy.testTypes(node1, node2, 'getType($index)', |
| 838 elements1.getType(node1), elements2.getType(node2)) && | 884 elements1.getType(node1), elements2.getType(node2)) && |
| 839 strategy.test( | 885 strategy.test( |
| 840 node1, | 886 node1, |
| 841 node2, | 887 node2, |
| 842 'getSelector($index)', | 888 'getSelector($index)', |
| 843 elements1.getSelector(node1), | 889 elements1.getSelector(node1), |
| 844 elements2.getSelector(node2), | 890 elements2.getSelector(node2), |
| 845 areSelectorsEquivalent) && | 891 areSelectorsEquivalent) && |
| 846 strategy.testConstants(node1, node2, 'getConstant($index)', | 892 strategy.testConstants(node1, node2, 'getConstant($index)', |
| 847 elements1.getConstant(node1), elements2.getConstant(node2)) && | 893 elements1.getConstant(node1), elements2.getConstant(node2)) && |
| 848 strategy.testTypes(node1, node2, 'typesCache[$index]', | 894 strategy.testTypes(node1, node2, 'typesCache[$index]', |
| 849 elements1.typesCache[node1], elements2.typesCache[node2]) && | 895 elements1.typesCache[node1], elements2.typesCache[node2]) && |
| 850 testJumpTargets( | 896 testJumpTargets( |
| 851 node1, | 897 node1, |
| 852 node2, | 898 node2, |
| 853 'getTargetDefinition($index)', | 899 'getTargetDefinition($index)', |
| 854 elements1.getTargetDefinition(node1), | 900 elements1.getTargetDefinition(node1), |
| 855 elements2.getTargetDefinition(node2)); | 901 elements2.getTargetDefinition(node2)) && |
| 902 testNativeData(node1, node2, 'getNativeData($index)', |
| 903 elements1.getNativeData(node1), elements2.getNativeData(node2)); |
| 856 | 904 |
| 857 node1.visitChildren(this); | 905 node1.visitChildren(this); |
| 858 } | 906 } |
| 859 | 907 |
| 860 @override | 908 @override |
| 861 visitSend(Send node1) { | 909 visitSend(Send node1) { |
| 862 visitExpression(node1); | 910 visitExpression(node1); |
| 863 if (!success) return; | 911 if (!success) return; |
| 864 int index = indices1.nodeIndices[node1]; | 912 int index = indices1.nodeIndices[node1]; |
| 865 Send node2 = indices2.nodeList[index]; | 913 Send node2 = indices2.nodeList[index]; |
| (...skipping 823 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1689 @override | 1737 @override |
| 1690 bool visitStatement(Statement node1, Statement node2) { | 1738 bool visitStatement(Statement node1, Statement node2) { |
| 1691 throw new UnsupportedError('Unexpected nodes: $node1 <> $node2'); | 1739 throw new UnsupportedError('Unexpected nodes: $node1 <> $node2'); |
| 1692 } | 1740 } |
| 1693 | 1741 |
| 1694 @override | 1742 @override |
| 1695 bool visitStringNode(StringNode node1, StringNode node2) { | 1743 bool visitStringNode(StringNode node1, StringNode node2) { |
| 1696 throw new UnsupportedError('Unexpected nodes: $node1 <> $node2'); | 1744 throw new UnsupportedError('Unexpected nodes: $node1 <> $node2'); |
| 1697 } | 1745 } |
| 1698 } | 1746 } |
| OLD | NEW |