anchor.diff:      IrBuilder condBuilder = new IrBuilder.recursive(this);
       ir.Primitive condition = condBuilder.visit(node.condition);
   
  -    JumpCollector breakCollector =
  -        new JumpCollector(elements.getTargetDefinition(node));
  +    JumpTarget target = elements.getTargetDefinition(node);
  +    JumpCollector breakCollector = new JumpCollector(target);
  +    JumpCollector continueCollector = new JumpCollector(target);
       breakCollectors.add(breakCollector);
  +    continueCollectors.add(continueCollector);
  +
       IrBuilder bodyBuilder = new IrBuilder.delimited(condBuilder);
       bodyBuilder.visit(node.body);
       assert(breakCollectors.last == breakCollector);
  +    assert(continueCollectors.last == continueCollector);
       breakCollectors.removeLast();
  +    continueCollectors.removeLast();
   
       // Create body entry and loop exit continuations and a branch to them.
       ir.Continuation bodyContinuation = new ir.Continuation([]);
  
positive.code:     //     let prim cond = [[condition]] in
      //     let cont break() = [[successor]] in
      //     let cont exit() = break(v, ...) in
      //     let cont body() = [[body]]; [[update]]; loop(v, ...) in
      //     branch cond (body, exit) in
      // loop(v, ...)
      //
      // If there are no breaks in the body, the break continuation is inlined
      // in the exit continuation (i.e., the translation of the successor
      // statement occurs in the exit continuation).
  
      if (node.initializer != null) visit(node.initializer);
  
  
negative.code:         parameters = <ir.Parameter>[],
          environment = new Environment.empty(),
          breakCollectors = parent.breakCollectors,
          continueCollectors = parent.continueCollectors,
          constantBuilder = parent.constantBuilder,
          localConstants = parent.localConstants,
          currentFunction = parent.currentFunction,
  