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

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

Issue 1896843002: Store and serialize NativeBehavior in TreeElements. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Updated cf. comments. Created 4 years, 8 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
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 '../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
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
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 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/resolution/tree_elements.dart ('k') | pkg/compiler/lib/src/serialization/keys.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698