| Index: tests/compiler/dart2js/equivalence/id_equivalence_test.dart
|
| diff --git a/tests/compiler/dart2js/equivalence/id_equivalence_test.dart b/tests/compiler/dart2js/equivalence/id_equivalence_test.dart
|
| index e7230e9c8acf06135d27e0a5a97fd7b7dc40fb62..7da602ef098723976dd873326fb7e209c0f38d7f 100644
|
| --- a/tests/compiler/dart2js/equivalence/id_equivalence_test.dart
|
| +++ b/tests/compiler/dart2js/equivalence/id_equivalence_test.dart
|
| @@ -22,6 +22,7 @@ import '../equivalence/id_equivalence_helper.dart';
|
| const List<String> dataDirectories = const <String>[
|
| '../closure/data',
|
| '../inference/data',
|
| + '../jumps/data',
|
| ];
|
|
|
| main() {
|
| @@ -42,6 +43,9 @@ main() {
|
| if (value1 != value2) {
|
| reportHere(data1.compiler.reporter, actualData1.sourceSpan,
|
| '$id: from source:${value1},from dill:${value2}');
|
| + print('--annotations diff----------------------------------------');
|
| + print(data1.computeDiffCodeFor(data2));
|
| + print('----------------------------------------------------------');
|
| }
|
| Expect.equals(value1, value2, 'Value mismatch for $id');
|
| });
|
| @@ -51,6 +55,9 @@ main() {
|
| if (value1 != value2) {
|
| reportHere(data2.compiler.reporter, actualData2.sourceSpan,
|
| '$id: from source:${value1},from dill:${value2}');
|
| + print('--annotations diff----------------------------------------');
|
| + print(data1.computeDiffCodeFor(data2));
|
| + print('----------------------------------------------------------');
|
| }
|
| Expect.equals(value1, value2, 'Value mismatch for $id');
|
| });
|
| @@ -86,13 +93,17 @@ class ComputerMixin {
|
| return 'local:$localName';
|
| }
|
|
|
| - String computeDynamicGetName(String propertyName) {
|
| - return 'dynamic-get:$propertyName';
|
| + String computeGetName(String propertyName) {
|
| + return 'get:$propertyName';
|
| }
|
|
|
| - String computeDynamicInvokeName(String propertyName) {
|
| - return 'dynamic-invoke:$propertyName';
|
| + String computeInvokeName(String propertyName) {
|
| + return 'invoke:$propertyName';
|
| }
|
| +
|
| + String get loopName => 'loop';
|
| +
|
| + String get gotoName => 'goto';
|
| }
|
|
|
| /// AST visitor for computing a descriptive mapping of the [Id]s in a member.
|
| @@ -107,12 +118,25 @@ class ResolvedAstComputer extends AbstractResolvedAstComputer
|
| if (element != null && element.isLocal) {
|
| return computeLocalName(element.name);
|
| }
|
| + if (node is ast.Loop) {
|
| + return loopName;
|
| + } else if (node is ast.GotoStatement) {
|
| + return gotoName;
|
| + }
|
| +
|
| + dynamic sendStructure;
|
| if (node is ast.Send) {
|
| - dynamic sendStructure = elements.getSendStructure(node);
|
| + sendStructure = elements.getSendStructure(node);
|
| if (sendStructure == null) return null;
|
|
|
| String getDynamicName() {
|
| switch (sendStructure.semantics.kind) {
|
| + case AccessKind.PARAMETER:
|
| + case AccessKind.FINAL_PARAMETER:
|
| + case AccessKind.LOCAL_VARIABLE:
|
| + case AccessKind.FINAL_LOCAL_VARIABLE:
|
| + case AccessKind.LOCAL_FUNCTION:
|
| + return sendStructure.semantics.element.name;
|
| case AccessKind.DYNAMIC_PROPERTY:
|
| DynamicAccess access = sendStructure.semantics;
|
| return access.name.text;
|
| @@ -124,16 +148,25 @@ class ResolvedAstComputer extends AbstractResolvedAstComputer
|
| switch (sendStructure.kind) {
|
| case SendStructureKind.GET:
|
| String dynamicName = getDynamicName();
|
| - if (dynamicName != null) return computeDynamicGetName(dynamicName);
|
| + if (dynamicName != null) return computeGetName(dynamicName);
|
| break;
|
| + case SendStructureKind.BINARY:
|
| + return computeInvokeName(sendStructure.operator.selectorName);
|
| + case SendStructureKind.EQUALS:
|
| + return computeInvokeName('==');
|
| + case SendStructureKind.NOT_EQUALS:
|
| + return computeInvokeName('!=');
|
| case SendStructureKind.INVOKE:
|
| String dynamicName = getDynamicName();
|
| - if (dynamicName != null) return computeDynamicInvokeName(dynamicName);
|
| + if (dynamicName != null) return computeInvokeName(dynamicName);
|
| break;
|
| default:
|
| }
|
| }
|
| - return '<unknown:$node>';
|
| + if (sendStructure != null) {
|
| + return '<unknown:$node (${node.runtimeType}) $sendStructure>';
|
| + }
|
| + return '<unknown:$node (${node.runtimeType})>';
|
| }
|
|
|
| @override
|
| @@ -171,11 +204,23 @@ class IrComputer extends AbstractIrComputer with ComputerMixin {
|
| } else if (node is ir.FunctionExpression) {
|
| return computeLocalName('');
|
| } else if (node is ir.MethodInvocation) {
|
| - return computeDynamicInvokeName(node.name.name);
|
| + return computeInvokeName(node.name.name);
|
| } else if (node is ir.PropertyGet) {
|
| - return computeDynamicGetName(node.name.name);
|
| + return computeGetName(node.name.name);
|
| + } else if (node is ir.VariableGet) {
|
| + return computeGetName(node.variable.name);
|
| + } else if (node is ir.DoStatement) {
|
| + return loopName;
|
| + } else if (node is ir.ForStatement) {
|
| + return loopName;
|
| + } else if (node is ir.ForInStatement) {
|
| + return loopName;
|
| + } else if (node is ir.WhileStatement) {
|
| + return loopName;
|
| + } else if (node is ir.BreakStatement) {
|
| + return gotoName;
|
| }
|
| - return '<unknown:$node>';
|
| + return '<unknown:$node (${node.runtimeType})>';
|
| }
|
|
|
| @override
|
|
|