| Index: sdk/lib/_internal/compiler/implementation/dart_backend/tree_tracer.dart
|
| diff --git a/sdk/lib/_internal/compiler/implementation/dart_backend/tree_tracer.dart b/sdk/lib/_internal/compiler/implementation/dart_backend/tree_tracer.dart
|
| index 79b3a847ec98ff4ee6ab5228cb637077ace539a9..59cdfdf56312d9b4cbc73f65198820fb878b1a25 100644
|
| --- a/sdk/lib/_internal/compiler/implementation/dart_backend/tree_tracer.dart
|
| +++ b/sdk/lib/_internal/compiler/implementation/dart_backend/tree_tracer.dart
|
| @@ -9,6 +9,7 @@ import '../tracer.dart';
|
| import 'dart_tree.dart';
|
|
|
| class Block {
|
| + Label label;
|
| int index;
|
| final List<Statement> statements = <Statement>[];
|
| final List<Block> predecessors = <Block>[];
|
| @@ -16,6 +17,8 @@ class Block {
|
|
|
| String get name => 'B$index';
|
|
|
| + Block([this.label]);
|
| +
|
| void addEdgeTo(Block successor) {
|
| successors.add(successor);
|
| successor.predecessors.add(this);
|
| @@ -59,7 +62,7 @@ class BlockCollector extends Visitor {
|
| visitNot(Not node) {}
|
|
|
| visitLabeledStatement(LabeledStatement node) {
|
| - Block target = new Block();
|
| + Block target = new Block(node.label);
|
| breakTargets[node.label] = target;
|
| visitStatement(node.body);
|
| _addBlock(target);
|
| @@ -152,6 +155,10 @@ class TreeTracer extends TracerUtil with Visitor {
|
| });
|
| });
|
| tag("HIR", () {
|
| + if (block.label != null) {
|
| + printStatement(null,
|
| + "Label ${block.name}, breakCount=${block.label.breakCount}");
|
| + }
|
| block.statements.forEach(visitStatement);
|
| });
|
| });
|
| @@ -186,7 +193,8 @@ class TreeTracer extends TracerUtil with Visitor {
|
| visitAssign(Assign node) {
|
| String name = names.varName(node.variable);
|
| String rhs = expr(node.definition);
|
| - printStatement(name, "let $name = $rhs");
|
| + String extra = node.hasExactlyOneUse ? "[single-use]" : "";
|
| + printStatement(null, "assign $name = $rhs $extra");
|
| }
|
|
|
| visitInvokeMethod(InvokeMethod node) {
|
| @@ -231,7 +239,7 @@ class TreeTracer extends TracerUtil with Visitor {
|
|
|
| visitContinue(Continue node) {
|
| printStatement(null,
|
| - "continue ${collector.breakTargets[node.target].name}");
|
| + "continue ${collector.continueTargets[node.target].name}");
|
| }
|
|
|
| visitIf(If node) {
|
| @@ -388,12 +396,9 @@ class Names {
|
| String varName(Variable v) {
|
| String name = _names[v];
|
| if (name == null) {
|
| - name = v.name;
|
| - if (v.cachedName != null) {
|
| - name = v.cachedName;
|
| - }
|
| + String prefix = v.element == null ? 'v' : '${v.element.name}_';
|
| while (name == null || _usedNames.contains(name)) {
|
| - name = "v${_counter++}";
|
| + name = "$prefix${_counter++}";
|
| }
|
| _names[v] = name;
|
| _usedNames.add(name);
|
|
|