Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(245)

Side by Side Diff: pkg/compiler/lib/src/serialization/equivalence.dart

Issue 2057993003: Serialize NativeBehavior for elements (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Cleanup. Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « pkg/compiler/lib/src/js_backend/native_data.dart ('k') | pkg/compiler/lib/src/typechecker.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 '../closure.dart'; 9 import '../closure.dart';
10 import '../common.dart'; 10 import '../common.dart';
11 import '../common/resolution.dart'; 11 import '../common/resolution.dart';
12 import '../constants/expressions.dart'; 12 import '../constants/expressions.dart';
13 import '../dart_types.dart'; 13 import '../dart_types.dart';
14 import '../elements/elements.dart'; 14 import '../elements/elements.dart';
15 import '../elements/visitor.dart'; 15 import '../elements/visitor.dart';
16 import '../js_backend/backend_serialization.dart' 16 import '../js_backend/backend_serialization.dart'
17 show JavaScriptBackendSerializer; 17 show NativeBehaviorSerialization;
18 import '../native/native.dart' show NativeBehavior; 18 import '../native/native.dart' show NativeBehavior;
19 import '../resolution/access_semantics.dart'; 19 import '../resolution/access_semantics.dart';
20 import '../resolution/send_structure.dart'; 20 import '../resolution/send_structure.dart';
21 import '../resolution/tree_elements.dart'; 21 import '../resolution/tree_elements.dart';
22 import '../tokens/token.dart'; 22 import '../tokens/token.dart';
23 import '../tree/nodes.dart'; 23 import '../tree/nodes.dart';
24 import '../universe/selector.dart'; 24 import '../universe/selector.dart';
25 import '../universe/use.dart'; 25 import '../universe/use.dart';
26 import '../util/util.dart'; 26 import '../util/util.dart';
27 import 'resolved_ast_serialization.dart'; 27 import 'resolved_ast_serialization.dart';
(...skipping 825 matching lines...) Expand 10 before | Expand all | Expand 10 after
853 TreeElementsEquivalenceVisitor visitor = new TreeElementsEquivalenceVisitor( 853 TreeElementsEquivalenceVisitor visitor = new TreeElementsEquivalenceVisitor(
854 indices1, indices2, elements1, elements2, strategy); 854 indices1, indices2, elements1, elements2, strategy);
855 resolvedAst1.node.accept(visitor); 855 resolvedAst1.node.accept(visitor);
856 if (visitor.success) { 856 if (visitor.success) {
857 return strategy.test(elements1, elements2, 'containsTryStatement', 857 return strategy.test(elements1, elements2, 'containsTryStatement',
858 elements1.containsTryStatement, elements2.containsTryStatement); 858 elements1.containsTryStatement, elements2.containsTryStatement);
859 } 859 }
860 return false; 860 return false;
861 } 861 }
862 862
863 bool testNativeBehavior(NativeBehavior a, NativeBehavior b,
864 [TestStrategy strategy = const TestStrategy()]) {
865 if (identical(a, b)) return true;
866 if (a == null || b == null) return false;
867 return strategy.test(
868 a, b, 'codeTemplateText', a.codeTemplateText, b.codeTemplateText) &&
869 strategy.test(a, b, 'isAllocation', a.isAllocation, b.isAllocation) &&
870 strategy.test(a, b, 'sideEffects', a.sideEffects, b.sideEffects) &&
871 strategy.test(a, b, 'throwBehavior', a.throwBehavior, b.throwBehavior) &&
872 strategy.testTypeLists(
873 a,
874 b,
875 'dartTypesReturned',
876 NativeBehaviorSerialization.filterDartTypes(a.typesReturned),
877 NativeBehaviorSerialization.filterDartTypes(b.typesReturned)) &&
878 strategy.testLists(
879 a,
880 b,
881 'specialTypesReturned',
882 NativeBehaviorSerialization.filterSpecialTypes(a.typesReturned),
883 NativeBehaviorSerialization.filterSpecialTypes(b.typesReturned)) &&
884 strategy.testTypeLists(
885 a,
886 b,
887 'dartTypesInstantiated',
888 NativeBehaviorSerialization.filterDartTypes(a.typesInstantiated),
889 NativeBehaviorSerialization.filterDartTypes(b.typesInstantiated)) &&
890 strategy.testLists(
891 a,
892 b,
893 'specialTypesInstantiated',
894 NativeBehaviorSerialization.filterSpecialTypes(a.typesInstantiated),
895 NativeBehaviorSerialization
896 .filterSpecialTypes(b.typesInstantiated)) &&
897 strategy.test(a, b, 'useGvn', a.useGvn, b.useGvn);
898 }
899
863 /// Visitor that checks the equivalence of [TreeElements] data. 900 /// Visitor that checks the equivalence of [TreeElements] data.
864 class TreeElementsEquivalenceVisitor extends Visitor { 901 class TreeElementsEquivalenceVisitor extends Visitor {
865 final TestStrategy strategy; 902 final TestStrategy strategy;
866 final AstIndexComputer indices1; 903 final AstIndexComputer indices1;
867 final AstIndexComputer indices2; 904 final AstIndexComputer indices2;
868 final TreeElements elements1; 905 final TreeElements elements1;
869 final TreeElements elements2; 906 final TreeElements elements2;
870 bool success = true; 907 bool success = true;
871 908
872 TreeElementsEquivalenceVisitor( 909 TreeElementsEquivalenceVisitor(
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
904 strategy.test( 941 strategy.test(
905 a, b, 'isBreakTarget', a.isBreakTarget, b.isBreakTarget) && 942 a, b, 'isBreakTarget', a.isBreakTarget, b.isBreakTarget) &&
906 strategy.test( 943 strategy.test(
907 a, b, 'isContinueTarget', a.isContinueTarget, b.isContinueTarget); 944 a, b, 'isContinueTarget', a.isContinueTarget, b.isContinueTarget);
908 } 945 }
909 946
910 bool testNativeData(Node node1, Node node2, String property, a, b) { 947 bool testNativeData(Node node1, Node node2, String property, a, b) {
911 if (identical(a, b)) return true; 948 if (identical(a, b)) return true;
912 if (a == null || b == null) return false; 949 if (a == null || b == null) return false;
913 if (a is NativeBehavior && b is NativeBehavior) { 950 if (a is NativeBehavior && b is NativeBehavior) {
914 return strategy.test(a, b, 'codeTemplateText', a.codeTemplateText, 951 return testNativeBehavior(a, b, strategy);
915 b.codeTemplateText) &&
916 strategy.test(a, b, 'isAllocation', a.isAllocation, b.isAllocation) &&
917 strategy.test(a, b, 'sideEffects', a.sideEffects, b.sideEffects) &&
918 strategy.test(
919 a, b, 'throwBehavior', a.throwBehavior, b.throwBehavior) &&
920 strategy.testTypeLists(
921 a,
922 b,
923 'dartTypesReturned',
924 JavaScriptBackendSerializer.filterDartTypes(a.typesReturned),
925 JavaScriptBackendSerializer.filterDartTypes(b.typesReturned)) &&
926 strategy.testLists(
927 a,
928 b,
929 'specialTypesReturned',
930 JavaScriptBackendSerializer.filterSpecialTypes(a.typesReturned),
931 JavaScriptBackendSerializer
932 .filterSpecialTypes(b.typesReturned)) &&
933 strategy.testTypeLists(
934 a,
935 b,
936 'dartTypesInstantiated',
937 JavaScriptBackendSerializer.filterDartTypes(a.typesInstantiated),
938 JavaScriptBackendSerializer
939 .filterDartTypes(b.typesInstantiated)) &&
940 strategy.testLists(
941 a,
942 b,
943 'specialTypesInstantiated',
944 JavaScriptBackendSerializer
945 .filterSpecialTypes(a.typesInstantiated),
946 JavaScriptBackendSerializer
947 .filterSpecialTypes(b.typesInstantiated)) &&
948 strategy.test(a, b, 'useGvn', a.useGvn, b.useGvn);
949 } 952 }
950 return true; 953 return true;
951 } 954 }
952 955
953 visitNode(Node node1) { 956 visitNode(Node node1) {
954 if (!success) return; 957 if (!success) return;
955 int index = indices1.nodeIndices[node1]; 958 int index = indices1.nodeIndices[node1];
956 Node node2 = indices2.nodeList[index]; 959 Node node2 = indices2.nodeList[index];
957 success = strategy.testElements( 960 success = strategy.testElements(
958 node1, node2, '[$index]', elements1[node1], elements2[node2]) && 961 node1, node2, '[$index]', elements1[node1], elements2[node2]) &&
(...skipping 863 matching lines...) Expand 10 before | Expand all | Expand 10 after
1822 @override 1825 @override
1823 bool visitStatement(Statement node1, Statement node2) { 1826 bool visitStatement(Statement node1, Statement node2) {
1824 throw new UnsupportedError('Unexpected nodes: $node1 <> $node2'); 1827 throw new UnsupportedError('Unexpected nodes: $node1 <> $node2');
1825 } 1828 }
1826 1829
1827 @override 1830 @override
1828 bool visitStringNode(StringNode node1, StringNode node2) { 1831 bool visitStringNode(StringNode node1, StringNode node2) {
1829 throw new UnsupportedError('Unexpected nodes: $node1 <> $node2'); 1832 throw new UnsupportedError('Unexpected nodes: $node1 <> $node2');
1830 } 1833 }
1831 } 1834 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/js_backend/native_data.dart ('k') | pkg/compiler/lib/src/typechecker.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698