anchor.diff:    // (if targets) to blocks.
     final Map<Label, Block> breakTargets = <Label, Block>{};
     final Map<Label, Block> continueTargets = <Label, Block>{};
  -  final Map<Statement, Block> ifTargets = <Statement, Block>{};
  +  final Map<Statement, Block> substatements = <Statement, Block>{};
  +
  +  Block catcher;
   
     void _addStatement(Statement statement) {
       blocks.last.statements.add(statement);
  
positive.code: 
    visitIf(If node) {
      String condition = expr(node.condition);
      String thenTarget = collector.ifTargets[node.thenStatement].name;
      String elseTarget = collector.ifTargets[node.elseStatement].name;
      printStatement(null, "if $condition then $thenTarget else $elseTarget");
    }
  
  
negative.code:     _addBlock(nextBlock);
      visitStatement(node.next);
  
      substatements[node.body] = bodyBlock;
      substatements[node.next] = nextBlock;
    }
  
    visitTry(Try node) {
      _addStatement(node);
      Block tryBlock = new Block();
      Block catchBlock = new Block();
  
      Block oldCatcher = catcher;
      catcher = catchBlock;
      _addBlock(tryBlock);
      visitStatement(node.tryBody);
      catcher = oldCatcher;
  
      _addBlock(catchBlock);
      visitStatement(node.catchBody);
  
      substatements[node.tryBody] = tryBlock;
      substatements[node.catchBody] = catchBlock;
    }
  
    visitExpressionStatement(ExpressionStatement node) {
  