anchor.diff:      var savedContinueTargets = continueTargets;
       var finallyName, finallyContName, finallyBlock;
       if (node.finallyBlock != null) {
  -      JumpTarget newBreakTarget(JumpTarget target) {
  -        return new JumpTarget(target.labels,
  -            make.parenthesizedExpression(
  -                make.functionExpression([],
  -                    make.functionInvocation(finallyName,
  -                        [target.expression]))));
  -      }
  -
  -      JumpTarget newContinueTarget(JumpTarget target) {
  -        if (target.trampolineName == null) {
  -          return newBreakTarget(target);
  -        }
  -        return new JumpTarget(target.labels,
  -            make.parenthesizedExpression(
  -                make.functionExpression([],
  -                    make.functionInvocation(finallyName,
  -                        [make.functionExpression([], make.block(
  -                             [make.assignmentExpression(
  -                                  make.identifier(target.trampolineName),
  -                                  target.expression)]))]))));
  -      }
  -
         finallyName = newName('finally');
         finallyContName = newName('cont');
         finallyBlock = currentBlock = make.emptyBlock();
  
positive.code:     return stmt;
    }
  
    visitForEachStatement(ast.ForEachStatement node) {
      if (node.awaitKeyword == null) {
        var stmt = _translateSynchronousForEach(node);
  
negative.code:     }
      return (rk, ek, sk) {
        return visit(node.iterator)(ek, (expr) {
          var savedBlock = currentBlock;
          var doneBlock = currentBlock = make.emptyBlock();
          var doneName = newName('done');
          if (currentStream != null) {
            addStatement(make.methodInvocation(
                make.identifier(currentStream), 'resume', []));
          }
          sk();
  
          var finallyBlock = currentBlock = make.emptyBlock();
          var finallyName = newName('finally');
          var finallyContName = newName('cont');
          var exceptionName = newName('e');
          var stackTraceName = newName('s');
          var streamName = newName('stream');
          addStatement(make.tryStatement(make.block(
              [make.methodInvocation(
                   make.newInstance(make.identifier('Future', 'value'),
                       [make.methodInvocation(
                            make.identifier(streamName), 'cancel', [])]),
                   'then',
                   [make.identifier(finallyContName)])]),
              [make.catchClause(null, exceptionName, stackTraceName,
                  make.block([ek.apply(exceptionName, stackTraceName)]))]));
  
          var catchBlock = currentBlock = make.emptyBlock();
          var catchName = newName('catch');
          addStatement(make.functionInvocation(finallyName,
              [make.functionExpression([],
                   ek.apply(exceptionName, stackTraceName))]));
  
          var listenBlock = currentBlock = make.emptyBlock();
          var parameter = newName('x');
  