| Index: tests/compiler/dart2js/equivalence/id_equivalence.dart
|
| diff --git a/tests/compiler/dart2js/inference/enumerator.dart b/tests/compiler/dart2js/equivalence/id_equivalence.dart
|
| similarity index 82%
|
| rename from tests/compiler/dart2js/inference/enumerator.dart
|
| rename to tests/compiler/dart2js/equivalence/id_equivalence.dart
|
| index fe219cee4ca3f893719a501667f31d9bc5eabc38..e6665eb376fcd1f9bbde64b902ddb50cf84c8dd9 100644
|
| --- a/tests/compiler/dart2js/inference/enumerator.dart
|
| +++ b/tests/compiler/dart2js/equivalence/id_equivalence.dart
|
| @@ -9,7 +9,7 @@ import 'package:compiler/src/resolution/tree_elements.dart';
|
| import 'package:compiler/src/tree/nodes.dart' as ast;
|
| import 'package:kernel/ast.dart' as ir;
|
|
|
| -enum IdKind { element, node }
|
| +enum IdKind { element, node, local_variable, local_function }
|
|
|
| /// Id for a code point or element with type inference information.
|
| abstract class Id {
|
| @@ -65,7 +65,7 @@ class NodeId implements Id {
|
|
|
| IdKind get kind => IdKind.node;
|
|
|
| - String toString() => value.toString();
|
| + String toString() => '$kind:$value';
|
| }
|
|
|
| abstract class AstEnumeratorMixin {
|
| @@ -89,17 +89,22 @@ abstract class AstEnumeratorMixin {
|
| }
|
| }
|
|
|
| - NodeId computeNodeId(ast.Send node) {
|
| - dynamic sendStructure = elements.getSendStructure(node);
|
| - if (sendStructure == null) return null;
|
| - switch (sendStructure.kind) {
|
| - case SendStructureKind.GET:
|
| - case SendStructureKind.INVOKE:
|
| - case SendStructureKind.INCOMPATIBLE_INVOKE:
|
| - return computeAccessId(node, sendStructure.semantics);
|
| - default:
|
| - return new NodeId(node.getBeginToken().charOffset);
|
| + NodeId computeNodeId(ast.Node node, AstElement element) {
|
| + if (element != null && element.isLocal) {
|
| + return new NodeId(node.getBeginToken().charOffset);
|
| + } else if (node is ast.Send) {
|
| + dynamic sendStructure = elements.getSendStructure(node);
|
| + if (sendStructure == null) return null;
|
| + switch (sendStructure.kind) {
|
| + case SendStructureKind.GET:
|
| + case SendStructureKind.INVOKE:
|
| + case SendStructureKind.INCOMPATIBLE_INVOKE:
|
| + return computeAccessId(node, sendStructure.semantics);
|
| + default:
|
| + return new NodeId(node.getBeginToken().charOffset);
|
| + }
|
| }
|
| + return new NodeId(node.getBeginToken().charOffset);
|
| }
|
| }
|
|
|
| @@ -136,7 +141,7 @@ class AstIdFinder extends ast.Visitor with AstEnumeratorMixin {
|
| visitSend(ast.Send node) {
|
| if (found == null) {
|
| visitNode(node);
|
| - Id id = computeNodeId(node);
|
| + Id id = computeNodeId(node, null);
|
| if (id == soughtId) {
|
| found = node;
|
| }
|
| @@ -148,7 +153,12 @@ class AstIdFinder extends ast.Visitor with AstEnumeratorMixin {
|
| for (ast.Node child in node.definitions) {
|
| AstElement element = elements[child];
|
| if (element != null) {
|
| - Id id = computeElementId(element);
|
| + Id id;
|
| + if (element is FieldElement) {
|
| + id = computeElementId(element);
|
| + } else {
|
| + id = computeNodeId(child, element);
|
| + }
|
| if (id == soughtId) {
|
| found = element;
|
| return;
|
| @@ -163,7 +173,12 @@ class AstIdFinder extends ast.Visitor with AstEnumeratorMixin {
|
| if (found == null) {
|
| AstElement element = elements.getFunctionDefinition(node);
|
| if (element != null) {
|
| - Id id = computeElementId(element);
|
| + Id id;
|
| + if (element is LocalFunctionElement) {
|
| + id = computeNodeId(node, element);
|
| + } else {
|
| + id = computeElementId(element);
|
| + }
|
| if (id == soughtId) {
|
| found = element;
|
| return;
|
|
|