| Index: tests/compiler/dart2js/inference/enumerator.dart
|
| diff --git a/tests/compiler/dart2js/inference/enumerator.dart b/tests/compiler/dart2js/inference/enumerator.dart
|
| deleted file mode 100644
|
| index fe219cee4ca3f893719a501667f31d9bc5eabc38..0000000000000000000000000000000000000000
|
| --- a/tests/compiler/dart2js/inference/enumerator.dart
|
| +++ /dev/null
|
| @@ -1,237 +0,0 @@
|
| -// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
|
| -// for details. All rights reserved. Use of this source code is governed by a
|
| -// BSD-style license that can be found in the LICENSE file.
|
| -
|
| -import 'package:compiler/src/elements/elements.dart';
|
| -import 'package:compiler/src/resolution/access_semantics.dart';
|
| -import 'package:compiler/src/resolution/send_structure.dart';
|
| -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 }
|
| -
|
| -/// Id for a code point or element with type inference information.
|
| -abstract class Id {
|
| - IdKind get kind;
|
| -}
|
| -
|
| -/// Id for an element with type inference information.
|
| -// TODO(johnniwinther): Support local variables, functions and parameters.
|
| -class ElementId implements Id {
|
| - final String className;
|
| - final String memberName;
|
| -
|
| - factory ElementId(String text) {
|
| - int dotPos = text.indexOf('.');
|
| - if (dotPos != -1) {
|
| - return new ElementId.internal(
|
| - text.substring(dotPos + 1), text.substring(0, dotPos));
|
| - } else {
|
| - return new ElementId.internal(text);
|
| - }
|
| - }
|
| -
|
| - ElementId.internal(this.memberName, [this.className]);
|
| -
|
| - int get hashCode => className.hashCode * 13 + memberName.hashCode * 17;
|
| -
|
| - bool operator ==(other) {
|
| - if (identical(this, other)) return true;
|
| - if (other is! ElementId) return false;
|
| - return className == other.className && memberName == other.memberName;
|
| - }
|
| -
|
| - IdKind get kind => IdKind.element;
|
| -
|
| - String toString() =>
|
| - className != null ? '$className.$memberName' : memberName;
|
| -}
|
| -
|
| -/// Id for a code point with type inference information.
|
| -// TODO(johnniwinther): Create an [NodeId]-based equivalence with the kernel IR.
|
| -class NodeId implements Id {
|
| - final int value;
|
| -
|
| - const NodeId(this.value);
|
| -
|
| - int get hashCode => value.hashCode;
|
| -
|
| - bool operator ==(other) {
|
| - if (identical(this, other)) return true;
|
| - if (other is! NodeId) return false;
|
| - return value == other.value;
|
| - }
|
| -
|
| - IdKind get kind => IdKind.node;
|
| -
|
| - String toString() => value.toString();
|
| -}
|
| -
|
| -abstract class AstEnumeratorMixin {
|
| - TreeElements get elements;
|
| -
|
| - ElementId computeElementId(AstElement element) {
|
| - String memberName = element.name;
|
| - if (element.isSetter) {
|
| - memberName += '=';
|
| - }
|
| - String className = element.enclosingClass?.name;
|
| - return new ElementId.internal(memberName, className);
|
| - }
|
| -
|
| - NodeId computeAccessId(ast.Send node, AccessSemantics access) {
|
| - switch (access.kind) {
|
| - case AccessKind.DYNAMIC_PROPERTY:
|
| - return new NodeId(node.selector.getBeginToken().charOffset);
|
| - default:
|
| - return new NodeId(node.getBeginToken().charOffset);
|
| - }
|
| - }
|
| -
|
| - 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);
|
| - }
|
| - }
|
| -}
|
| -
|
| -/// Visitor that finds the AST node or element corresponding to an [Id].
|
| -class AstIdFinder extends ast.Visitor with AstEnumeratorMixin {
|
| - Id soughtId;
|
| - var /*AstElement|ast.Node*/ found;
|
| - final TreeElements elements;
|
| -
|
| - AstIdFinder(this.elements);
|
| -
|
| - /// Visits the subtree of [root] returns the [ast.Node] or [AstElement]
|
| - /// corresponding to [id].
|
| - /*AstElement|ast.Node*/ find(ast.Node root, Id id) {
|
| - soughtId = id;
|
| - root.accept(this);
|
| - var result = found;
|
| - found = null;
|
| - return result;
|
| - }
|
| -
|
| - visit(ast.Node node) {
|
| - if (found == null) {
|
| - node?.accept(this);
|
| - }
|
| - }
|
| -
|
| - visitNode(ast.Node node) {
|
| - if (found == null) {
|
| - node.visitChildren(this);
|
| - }
|
| - }
|
| -
|
| - visitSend(ast.Send node) {
|
| - if (found == null) {
|
| - visitNode(node);
|
| - Id id = computeNodeId(node);
|
| - if (id == soughtId) {
|
| - found = node;
|
| - }
|
| - }
|
| - }
|
| -
|
| - visitVariableDefinitions(ast.VariableDefinitions node) {
|
| - if (found == null) {
|
| - for (ast.Node child in node.definitions) {
|
| - AstElement element = elements[child];
|
| - if (element != null) {
|
| - Id id = computeElementId(element);
|
| - if (id == soughtId) {
|
| - found = element;
|
| - return;
|
| - }
|
| - }
|
| - }
|
| - visitNode(node);
|
| - }
|
| - }
|
| -
|
| - visitFunctionExpression(ast.FunctionExpression node) {
|
| - if (found == null) {
|
| - AstElement element = elements.getFunctionDefinition(node);
|
| - if (element != null) {
|
| - Id id = computeElementId(element);
|
| - if (id == soughtId) {
|
| - found = element;
|
| - return;
|
| - }
|
| - }
|
| - visitNode(node);
|
| - }
|
| - }
|
| -}
|
| -
|
| -abstract class IrEnumeratorMixin {
|
| - Id computeElementId(ir.Member node) {
|
| - String className;
|
| - if (node.enclosingClass != null) {
|
| - className = node.enclosingClass.name;
|
| - }
|
| - String memberName = node.name.name;
|
| - if (node is ir.Procedure && node.kind == ir.ProcedureKind.Setter) {
|
| - memberName += '=';
|
| - }
|
| - return new ElementId.internal(memberName, className);
|
| - }
|
| -
|
| - Id computeNodeId(ir.Node node) {
|
| - if (node is ir.MethodInvocation) {
|
| - assert(node.fileOffset != ir.TreeNode.noOffset);
|
| - return new NodeId(node.fileOffset);
|
| - } else if (node is ir.PropertyGet) {
|
| - assert(node.fileOffset != ir.TreeNode.noOffset);
|
| - return new NodeId(node.fileOffset);
|
| - }
|
| - return null;
|
| - }
|
| -}
|
| -
|
| -/// Visitor that finds the IR node corresponding to an [Id].
|
| -class IrIdFinder extends ir.Visitor with IrEnumeratorMixin {
|
| - Id soughtId;
|
| - ir.Node found;
|
| -
|
| - /// Visits the subtree of [root] returns the [ir.Node] corresponding to [id].
|
| - ir.Node find(ir.Node root, Id id) {
|
| - soughtId = id;
|
| - root.accept(this);
|
| - var result = found;
|
| - found = null;
|
| - return result;
|
| - }
|
| -
|
| - defaultNode(ir.Node node) {
|
| - if (found == null) {
|
| - Id id = computeNodeId(node);
|
| - if (id == soughtId) {
|
| - found = node;
|
| - return;
|
| - }
|
| - node.visitChildren(this);
|
| - }
|
| - }
|
| -
|
| - defaultMember(ir.Member node) {
|
| - if (found == null) {
|
| - Id id = computeElementId(node);
|
| - if (id == soughtId) {
|
| - found = node;
|
| - return;
|
| - }
|
| - defaultNode(node);
|
| - }
|
| - }
|
| -}
|
|
|