anchor.diff:            JS.Yield(js.call('#.moveNext()', iter))
               ..sourceInformation = _nodeStart(variable),
             init,
  -          _visitStatement(node.body),
  +          _visitStatement(body),
             JS.Yield(js.call('#.cancel()', iter))
               ..sourceInformation = _nodeStart(variable)
           ]);
  
positive.code: 
    @override
    JS.For visitForStatement(ForStatement node) {
      var init = _visitExpression(node.initialization) ??
          visitVariableDeclarationList(node.variables);
      var updaters = node.updaters;
      JS.Expression update;
      if (updaters != null && updaters.isNotEmpty) {
        update =
            JS.Expression.binary(updaters.map(_visitExpression).toList(), ',')
                .toVoidExpression();
      }
      var condition = _visitTest(node.condition);
      return JS.For(init, condition, update, _visitScope(node.body));
    }
  
    @override
  
negative.code:       _unreachable(node);
  
    @override
    JS.Statement visitForStatement2(ForStatement2 node) {
      // TODO(nshahan) Simplify when control-flow-collections experiments are removed.
      var forParts = node.forLoopParts;
      if (forParts is ForPartsWithExpression) {
        return _emitFor(forParts.initialization, null, forParts.condition,
            forParts.updaters, node.body);
      } else if (forParts is ForPartsWithDeclarations) {
        return _emitFor(null, forParts.variables, forParts.condition,
            forParts.updaters, node.body);
      } else if (node.awaitKeyword == null) {
        if (forParts is ForEachPartsWithIdentifier) {
          return _emitForEach(
              forParts.identifier, null, forParts.iterable, node.body);
        } else if (forParts is ForEachPartsWithDeclaration) {
          return _emitForEach(
              null, forParts.loopVariable, forParts.iterable, node.body);
        }
      } else if (forParts is ForEachPartsWithIdentifier) {
        return _emitAwaitFor(
            forParts.identifier, null, forParts.iterable, node.body);
      } else if (forParts is ForEachPartsWithDeclaration) {
        return _emitAwaitFor(
            null, forParts.loopVariable, forParts.iterable, node.body);
      }
      return _unreachable(node);
    }
  
    @deprecated
    @override
  