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

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

Issue 2951723002: Add closure_test for kernel based members (Closed)
Patch Set: Cleanup Created 3 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
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 'package:compiler/src/elements/elements.dart'; 5 import 'package:compiler/src/elements/elements.dart';
6 import 'package:compiler/src/resolution/access_semantics.dart'; 6 import 'package:compiler/src/resolution/access_semantics.dart';
7 import 'package:compiler/src/resolution/send_structure.dart'; 7 import 'package:compiler/src/resolution/send_structure.dart';
8 import 'package:compiler/src/resolution/tree_elements.dart'; 8 import 'package:compiler/src/resolution/tree_elements.dart';
9 import 'package:compiler/src/tree/nodes.dart' as ast; 9 import 'package:compiler/src/tree/nodes.dart' as ast;
10 import 'package:kernel/ast.dart' as ir; 10 import 'package:kernel/ast.dart' as ir;
11 11
12 enum IdKind { element, node, local_variable, local_function } 12 enum IdKind {
13 element,
14 node,
15 }
13 16
14 /// Id for a code point or element with type inference information. 17 /// Id for a code point or element with type inference information.
15 abstract class Id { 18 abstract class Id {
16 IdKind get kind; 19 IdKind get kind;
17 } 20 }
18 21
19 /// Id for an element with type inference information. 22 /// Id for an element with type inference information.
20 // TODO(johnniwinther): Support local variables, functions and parameters. 23 // TODO(johnniwinther): Support local variables, functions and parameters.
21 class ElementId implements Id { 24 class ElementId implements Id {
22 final String className; 25 final String className;
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
78 } 81 }
79 String className = element.enclosingClass?.name; 82 String className = element.enclosingClass?.name;
80 return new ElementId.internal(memberName, className); 83 return new ElementId.internal(memberName, className);
81 } 84 }
82 85
83 NodeId computeAccessId(ast.Send node, AccessSemantics access) { 86 NodeId computeAccessId(ast.Send node, AccessSemantics access) {
84 switch (access.kind) { 87 switch (access.kind) {
85 case AccessKind.DYNAMIC_PROPERTY: 88 case AccessKind.DYNAMIC_PROPERTY:
86 return new NodeId(node.selector.getBeginToken().charOffset); 89 return new NodeId(node.selector.getBeginToken().charOffset);
87 default: 90 default:
88 return new NodeId(node.getBeginToken().charOffset); 91 return null;
89 } 92 }
90 } 93 }
91 94
92 NodeId computeNodeId(ast.Node node, AstElement element) { 95 NodeId computeNodeId(ast.Node node, AstElement element) {
93 if (element != null && element.isLocal) { 96 if (element != null && element.isLocal) {
94 return new NodeId(node.getBeginToken().charOffset); 97 return new NodeId(node.getBeginToken().charOffset);
95 } else if (node is ast.Send) { 98 } else if (node is ast.Send) {
96 dynamic sendStructure = elements.getSendStructure(node); 99 dynamic sendStructure = elements.getSendStructure(node);
97 if (sendStructure == null) return null; 100 if (sendStructure == null) return null;
98 switch (sendStructure.kind) { 101 switch (sendStructure.kind) {
99 case SendStructureKind.GET: 102 case SendStructureKind.GET:
100 case SendStructureKind.INVOKE: 103 case SendStructureKind.INVOKE:
101 case SendStructureKind.INCOMPATIBLE_INVOKE:
102 return computeAccessId(node, sendStructure.semantics); 104 return computeAccessId(node, sendStructure.semantics);
103 default: 105 default:
104 return new NodeId(node.getBeginToken().charOffset);
105 } 106 }
106 } 107 }
107 return new NodeId(node.getBeginToken().charOffset); 108 return null;
108 } 109 }
109 } 110 }
110 111
111 /// Visitor that finds the AST node or element corresponding to an [Id]. 112 /// Visitor that finds the AST node or element corresponding to an [Id].
112 class AstIdFinder extends ast.Visitor with AstEnumeratorMixin { 113 class AstIdFinder extends ast.Visitor with AstEnumeratorMixin {
113 Id soughtId; 114 Id soughtId;
114 var /*AstElement|ast.Node*/ found; 115 var /*AstElement|ast.Node*/ found;
115 final TreeElements elements; 116 final TreeElements elements;
116 117
117 AstIdFinder(this.elements); 118 AstIdFinder(this.elements);
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
195 if (node.enclosingClass != null) { 196 if (node.enclosingClass != null) {
196 className = node.enclosingClass.name; 197 className = node.enclosingClass.name;
197 } 198 }
198 String memberName = node.name.name; 199 String memberName = node.name.name;
199 if (node is ir.Procedure && node.kind == ir.ProcedureKind.Setter) { 200 if (node is ir.Procedure && node.kind == ir.ProcedureKind.Setter) {
200 memberName += '='; 201 memberName += '=';
201 } 202 }
202 return new ElementId.internal(memberName, className); 203 return new ElementId.internal(memberName, className);
203 } 204 }
204 205
205 Id computeNodeId(ir.Node node) { 206 Id computeNodeId(ir.TreeNode node) {
206 if (node is ir.MethodInvocation) { 207 if (node is ir.MethodInvocation) {
207 assert(node.fileOffset != ir.TreeNode.noOffset); 208 assert(node.fileOffset != ir.TreeNode.noOffset);
208 return new NodeId(node.fileOffset); 209 return new NodeId(node.fileOffset);
209 } else if (node is ir.PropertyGet) { 210 } else if (node is ir.PropertyGet) {
210 assert(node.fileOffset != ir.TreeNode.noOffset); 211 assert(node.fileOffset != ir.TreeNode.noOffset);
211 return new NodeId(node.fileOffset); 212 return new NodeId(node.fileOffset);
213 } else if (node is ir.VariableDeclaration) {
214 assert(node.fileOffset != ir.TreeNode.noOffset);
215 return new NodeId(node.fileOffset);
216 } else if (node is ir.FunctionDeclaration) {
217 assert(node.fileOffset != ir.TreeNode.noOffset);
218 return new NodeId(node.fileOffset);
212 } 219 }
213 return null; 220 return null;
214 } 221 }
215 } 222 }
216 223
217 /// Visitor that finds the IR node corresponding to an [Id]. 224 /// Visitor that finds the IR node corresponding to an [Id].
218 class IrIdFinder extends ir.Visitor with IrEnumeratorMixin { 225 class IrIdFinder extends ir.Visitor with IrEnumeratorMixin {
219 Id soughtId; 226 Id soughtId;
220 ir.Node found; 227 ir.Node found;
221 228
222 /// Visits the subtree of [root] returns the [ir.Node] corresponding to [id]. 229 /// Visits the subtree of [root] returns the [ir.Node] corresponding to [id].
223 ir.Node find(ir.Node root, Id id) { 230 ir.Node find(ir.Node root, Id id) {
224 soughtId = id; 231 soughtId = id;
225 root.accept(this); 232 root.accept(this);
226 var result = found; 233 var result = found;
227 found = null; 234 found = null;
228 return result; 235 return result;
229 } 236 }
230 237
231 defaultNode(ir.Node node) { 238 defaultTreeNode(ir.TreeNode node) {
232 if (found == null) { 239 if (found == null) {
233 Id id = computeNodeId(node); 240 Id id = computeNodeId(node);
234 if (id == soughtId) { 241 if (id == soughtId) {
235 found = node; 242 found = node;
236 return; 243 return;
237 } 244 }
238 node.visitChildren(this); 245 node.visitChildren(this);
239 } 246 }
240 } 247 }
241 248
242 defaultMember(ir.Member node) { 249 defaultMember(ir.Member node) {
243 if (found == null) { 250 if (found == null) {
244 Id id = computeElementId(node); 251 Id id = computeElementId(node);
245 if (id == soughtId) { 252 if (id == soughtId) {
246 found = node; 253 found = node;
247 return; 254 return;
248 } 255 }
249 defaultNode(node); 256 defaultTreeNode(node);
250 } 257 }
251 } 258 }
252 } 259 }
OLDNEW
« no previous file with comments | « tests/compiler/dart2js/closure/closure_test.dart ('k') | tests/compiler/dart2js/equivalence/id_equivalence_helper.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698