anchor.diff:      _addBlock(nextBlock);
       visitStatement(node.next);
   
  -    ifTargets[node.body] = bodyBlock;
  -    ifTargets[node.next] = nextBlock;
  +    substatements[node.body] = bodyBlock;
  +    substatements[node.next] = nextBlock;
     }
   
     visitTry(Try node) {
  -    // It's not obvious how we want to represent try statements here.
  -    // TODO(kmillikin).
  +    _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) {
  
positive.code: 
    void _addBlock(Block block) {
      block.index = blocks.length;
      blocks.add(block);
    }
  
  
negative.code:   }
  
    visitWhileCondition(WhileCondition node) {
      String bodyTarget = collector.substatements[node.body].name;
      String nextTarget = collector.substatements[node.next].name;
      printStatement(null, "while ${expr(node.condition)}");
      printStatement(null, "do $bodyTarget");
      printStatement(null, "then $nextTarget" );
    }
  
    visitTry(Try node) {
      String tryTarget = collector.substatements[node.tryBody].name;
      String catchParams = node.catchParameters.map(names.varName).join(',');
      String catchTarget = collector.substatements[node.catchBody].name;
      printStatement(null, 'try $tryTarget catch($catchParams) $catchTarget');
    }
  
    visitExpressionStatement(ExpressionStatement node) {
  