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

Side by Side Diff: tests/compiler/dart2js/equivalence/id_equivalence_test.dart

Issue 3002823002: Add more info to closure_test output (Closed)
Patch Set: Created 3 years, 4 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) 2017, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2017, 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 import 'dart:io'; 5 import 'dart:io';
6 import 'package:async_helper/async_helper.dart'; 6 import 'package:async_helper/async_helper.dart';
7 import 'package:compiler/src/common.dart'; 7 import 'package:compiler/src/common.dart';
8 import 'package:compiler/src/compiler.dart'; 8 import 'package:compiler/src/compiler.dart';
9 import 'package:compiler/src/diagnostics/diagnostic_listener.dart'; 9 import 'package:compiler/src/diagnostics/diagnostic_listener.dart';
10 import 'package:compiler/src/elements/elements.dart'; 10 import 'package:compiler/src/elements/elements.dart';
(...skipping 18 matching lines...) Expand all
29 for (String path in dataDirectories) { 29 for (String path in dataDirectories) {
30 Directory dataDir = new Directory.fromUri(Platform.script.resolve(path)); 30 Directory dataDir = new Directory.fromUri(Platform.script.resolve(path));
31 await for (FileSystemEntity entity in dataDir.list()) { 31 await for (FileSystemEntity entity in dataDir.list()) {
32 print('Checking ${entity.uri}'); 32 print('Checking ${entity.uri}');
33 String annotatedCode = 33 String annotatedCode =
34 await new File.fromUri(entity.uri).readAsString(); 34 await new File.fromUri(entity.uri).readAsString();
35 IdData data1 = await computeData( 35 IdData data1 = await computeData(
36 annotatedCode, computeAstMemberData, compileFromSource); 36 annotatedCode, computeAstMemberData, compileFromSource);
37 IdData data2 = await computeData( 37 IdData data2 = await computeData(
38 annotatedCode, computeIrMemberData, compileFromDill); 38 annotatedCode, computeIrMemberData, compileFromDill);
39 data1.actualMap.forEach((Id id, String value1) { 39 data1.actualMap.forEach((Id id, ActualData actualData1) {
40 String value2 = data2.actualMap[id]; 40 String value1 = actualData1.value;
41 String value2 = data2.actualMap[id]?.value;
41 if (value1 != value2) { 42 if (value1 != value2) {
42 reportHere(data1.compiler.reporter, data1.sourceSpanMap[id], 43 reportHere(data1.compiler.reporter, actualData1.sourceSpan,
43 '$id: from source:${value1},from dill:${value2}'); 44 '$id: from source:${value1},from dill:${value2}');
44 } 45 }
45 Expect.equals(value1, value2, 'Value mismatch for $id'); 46 Expect.equals(value1, value2, 'Value mismatch for $id');
46 }); 47 });
47 data2.actualMap.forEach((Id id, String value2) { 48 data2.actualMap.forEach((Id id, ActualData actualData2) {
48 String value1 = data1.actualMap[id]; 49 String value2 = actualData2.value;
50 String value1 = data1.actualMap[id]?.value;
49 if (value1 != value2) { 51 if (value1 != value2) {
50 reportHere(data2.compiler.reporter, data2.sourceSpanMap[id], 52 reportHere(data2.compiler.reporter, actualData2.sourceSpan,
51 '$id: from source:${value1},from dill:${value2}'); 53 '$id: from source:${value1},from dill:${value2}');
52 } 54 }
53 Expect.equals(value1, value2, 'Value mismatch for $id'); 55 Expect.equals(value1, value2, 'Value mismatch for $id');
54 }); 56 });
55 } 57 }
56 } 58 }
57 }); 59 });
58 } 60 }
59 61
60 /// Compute a descriptive mapping of the [Id]s in [_member] as a 62 /// Compute a descriptive mapping of the [Id]s in [_member] as a
61 /// [MemberElement]. 63 /// [MemberElement].
62 /// 64 ///
63 /// Fills [actualMap] with the data and [sourceSpanMap] with the source spans 65 /// Fills [actualMap] with the data and [sourceSpanMap] with the source spans
64 /// for the data origin. 66 /// for the data origin.
65 void computeAstMemberData(Compiler compiler, MemberEntity _member, 67 void computeAstMemberData(
66 Map<Id, String> actualMap, Map<Id, SourceSpan> sourceSpanMap, 68 Compiler compiler, MemberEntity _member, Map<Id, ActualData> actualMap,
67 {bool verbose: false}) { 69 {bool verbose: false}) {
68 MemberElement member = _member; 70 MemberElement member = _member;
69 ResolvedAst resolvedAst = member.resolvedAst; 71 ResolvedAst resolvedAst = member.resolvedAst;
70 if (resolvedAst.kind != ResolvedAstKind.PARSED) return; 72 if (resolvedAst.kind != ResolvedAstKind.PARSED) return;
71 new ResolvedAstComputer( 73 new ResolvedAstComputer(compiler.reporter, actualMap, resolvedAst).run();
72 compiler.reporter, actualMap, sourceSpanMap, resolvedAst)
73 .run();
74 } 74 }
75 75
76 /// Mixin used for0computing a descriptive mapping of the [Id]s in a member. 76 /// Mixin used for0computing a descriptive mapping of the [Id]s in a member.
77 class ComputerMixin { 77 class ComputerMixin {
78 String computeMemberName(String className, String memberName) { 78 String computeMemberName(String className, String memberName) {
79 if (className != null) { 79 if (className != null) {
80 return 'member:$className.$memberName'; 80 return 'member:$className.$memberName';
81 } 81 }
82 return 'member:$memberName'; 82 return 'member:$memberName';
83 } 83 }
84 84
85 String computeLocalName(String localName) { 85 String computeLocalName(String localName) {
86 return 'local:$localName'; 86 return 'local:$localName';
87 } 87 }
88 88
89 String computeDynamicGetName(String propertyName) { 89 String computeDynamicGetName(String propertyName) {
90 return 'dynamic-get:$propertyName'; 90 return 'dynamic-get:$propertyName';
91 } 91 }
92 92
93 String computeDynamicInvokeName(String propertyName) { 93 String computeDynamicInvokeName(String propertyName) {
94 return 'dynamic-invoke:$propertyName'; 94 return 'dynamic-invoke:$propertyName';
95 } 95 }
96 } 96 }
97 97
98 /// AST visitor for computing a descriptive mapping of the [Id]s in a member. 98 /// AST visitor for computing a descriptive mapping of the [Id]s in a member.
99 class ResolvedAstComputer extends AbstractResolvedAstComputer 99 class ResolvedAstComputer extends AbstractResolvedAstComputer
100 with ComputerMixin { 100 with ComputerMixin {
101 ResolvedAstComputer(DiagnosticReporter reporter, Map<Id, String> actualMap, 101 ResolvedAstComputer(DiagnosticReporter reporter,
102 Map<Id, SourceSpan> spannableMap, ResolvedAst resolvedAst) 102 Map<Id, ActualData> actualMap, ResolvedAst resolvedAst)
103 : super(reporter, actualMap, spannableMap, resolvedAst); 103 : super(reporter, actualMap, resolvedAst);
104 104
105 @override 105 @override
106 String computeNodeValue(ast.Node node, AstElement element) { 106 String computeNodeValue(ast.Node node, AstElement element) {
107 if (element != null && element.isLocal) { 107 if (element != null && element.isLocal) {
108 return computeLocalName(element.name); 108 return computeLocalName(element.name);
109 } 109 }
110 if (node is ast.Send) { 110 if (node is ast.Send) {
111 dynamic sendStructure = elements.getSendStructure(node); 111 dynamic sendStructure = elements.getSendStructure(node);
112 if (sendStructure == null) return null; 112 if (sendStructure == null) return null;
113 113
(...skipping 26 matching lines...) Expand all
140 String computeElementValue(AstElement element) { 140 String computeElementValue(AstElement element) {
141 return computeMemberName(element.enclosingClass?.name, element.name); 141 return computeMemberName(element.enclosingClass?.name, element.name);
142 } 142 }
143 } 143 }
144 144
145 /// Compute a descriptive mapping of the [Id]s in [member] as a kernel based 145 /// Compute a descriptive mapping of the [Id]s in [member] as a kernel based
146 /// member. 146 /// member.
147 /// 147 ///
148 /// Fills [actualMap] with the data and [sourceSpanMap] with the source spans 148 /// Fills [actualMap] with the data and [sourceSpanMap] with the source spans
149 /// for the data origin. 149 /// for the data origin.
150 void computeIrMemberData(Compiler compiler, MemberEntity member, 150 void computeIrMemberData(
151 Map<Id, String> actualMap, Map<Id, Spannable> spannableMap, 151 Compiler compiler, MemberEntity member, Map<Id, ActualData> actualMap,
152 {bool verbose: false}) { 152 {bool verbose: false}) {
153 KernelBackendStrategy backendStrategy = compiler.backendStrategy; 153 KernelBackendStrategy backendStrategy = compiler.backendStrategy;
154 KernelToElementMapForBuilding elementMap = backendStrategy.elementMap; 154 KernelToElementMapForBuilding elementMap = backendStrategy.elementMap;
155 MemberDefinition definition = elementMap.getMemberDefinition(member); 155 MemberDefinition definition = elementMap.getMemberDefinition(member);
156 assert(definition.kind == MemberKind.regular, 156 assert(definition.kind == MemberKind.regular,
157 failedAt(member, "Unexpected member definition $definition")); 157 failedAt(member, "Unexpected member definition $definition"));
158 new IrComputer(actualMap, spannableMap).run(definition.node); 158 new IrComputer(actualMap).run(definition.node);
159 } 159 }
160 160
161 /// IR visitor for computing a descriptive mapping of the [Id]s in a member. 161 /// IR visitor for computing a descriptive mapping of the [Id]s in a member.
162 class IrComputer extends AbstractIrComputer with ComputerMixin { 162 class IrComputer extends AbstractIrComputer with ComputerMixin {
163 IrComputer(Map<Id, String> actualMap, Map<Id, SourceSpan> spannableMap) 163 IrComputer(Map<Id, ActualData> actualMap) : super(actualMap);
164 : super(actualMap, spannableMap);
165 164
166 @override 165 @override
167 String computeNodeValue(ir.TreeNode node) { 166 String computeNodeValue(ir.TreeNode node) {
168 if (node is ir.VariableDeclaration) { 167 if (node is ir.VariableDeclaration) {
169 return computeLocalName(node.name); 168 return computeLocalName(node.name);
170 } else if (node is ir.FunctionDeclaration) { 169 } else if (node is ir.FunctionDeclaration) {
171 return computeLocalName(node.variable.name); 170 return computeLocalName(node.variable.name);
172 } else if (node is ir.FunctionExpression) { 171 } else if (node is ir.FunctionExpression) {
173 return computeLocalName(''); 172 return computeLocalName('');
174 } else if (node is ir.MethodInvocation) { 173 } else if (node is ir.MethodInvocation) {
175 return computeDynamicInvokeName(node.name.name); 174 return computeDynamicInvokeName(node.name.name);
176 } else if (node is ir.PropertyGet) { 175 } else if (node is ir.PropertyGet) {
177 return computeDynamicGetName(node.name.name); 176 return computeDynamicGetName(node.name.name);
178 } 177 }
179 return '<unknown:$node>'; 178 return '<unknown:$node>';
180 } 179 }
181 180
182 @override 181 @override
183 String computeMemberValue(ir.Member member) { 182 String computeMemberValue(ir.Member member) {
184 return computeMemberName(member.enclosingClass?.name, member.name.name); 183 return computeMemberName(member.enclosingClass?.name, member.name.name);
185 } 184 }
186 } 185 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698