anchor.diff:      currentBlockInformation = info;
       bool success = info.accept(this);
       currentBlockInformation = oldBlockInformation;
  +
       if (success) {
         HBasicBlock continuation = block.continuation;
         if (continuation != null) {
  -        visitBasicBlock(continuation);
  +        continueSubGraph(continuation);
         }
       }
       return success;
     }
   
  -  void visitBasicBlock(HBasicBlock node) {
  +  void enterSubGraph(HBasicBlock node) {
  +    assert(blockQueue.isEmpty);
  +    assert(node != null);
  +    continueSubGraph(node);
  +    while (blockQueue.isNotEmpty) {
  +      node = blockQueue.removeFirst();
  +      assert(node.isLive);
  +      assert(subGraph.contains(node));
  +
  +      // If this node has block-structure based information attached,
  +      // try using that to traverse from here.
  +      if (node.blockFlow != null && handleBlockFlow(node.blockFlow)) {
  +        continue;
  +      }
  +
  +      iterateBasicBlock(node);
  +    }
  +  }
  +
  +  void continueSubGraph(HBasicBlock node) {
       if (!node.isLive) return;
  -
  -    // Abort traversal if we are leaving the currently active sub-graph.
  +    // Don't follow edges out of the current sub-graph.
       if (!subGraph.contains(node)) return;
  -
  -    // If this node has block-structure based information attached,
  -    // try using that to traverse from here.
  -    if (node.blockFlow != null && handleBlockFlow(node.blockFlow)) {
  -      return;
  -    }
  -    iterateBasicBlock(node);
  +    blockQueue.add(node);
     }
   
     void emitAssignment(String destination, String source) {
  
positive.code:     // (e.g., return/throw/break) there can be any number of these.
      List<HBasicBlock> dominated = node.block.dominatedBlocks;
      for (int i = 2; i < dominated.length; i++) {
        visitBasicBlock(dominated[i]);
      }
    }
  
  
negative.code: // BSD-style license that can be found in the LICENSE file.
  
  import 'dart:math' as math;
  import 'dart:collection' show Queue;
  import '../common.dart';
  import '../common/codegen.dart' show CodegenRegistry, CodegenWorkItem;
  import '../common/tasks.dart' show CompilerTask;
  