| 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 134a8bd4cc21f252a52702a669d409357570be9f..192a07e45c38df49e8006dddde548bbf355a660f 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);
|
| @@ -60,7 +63,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);
|
| @@ -153,6 +156,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);
|
| });
|
| });
|
| @@ -187,7 +194,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) {
|
| @@ -236,7 +244,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) {
|
| @@ -404,12 +412,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);
|
|
|