anchor.diff:        bool oldInsideUntranslatedBreakable = insideUntranslatedBreakable;
         insideUntranslatedBreakable = true;
         addStatement(js.js.statement('do {#} while (#)',
  -          [translateInBlock(node.body), visitExpression(node.condition)]));
  +          [translateToStatement(node.body), visitExpression(node.condition)]));
         insideUntranslatedBreakable = oldInsideUntranslatedBreakable;
         return;
       }
  
positive.code:     unsupported(node);
    }
  
    // Only used for code where `!shouldTransform(node)`.
    js.Block translateInBlock(js.Statement node) {
      assert(!shouldTransform(node));
      List<js.Statement> oldBuffer = currentStatementBuffer;
      currentStatementBuffer = new List();
      List<js.Statement> resultBuffer = currentStatementBuffer;
      visitStatement(node);
      currentStatementBuffer = oldBuffer;
      return new js.Block(resultBuffer);
    }
  
    @override
    void visitIf(js.If node) {
      if (!shouldTransform(node.then) && !shouldTransform(node.otherwise)) {
        withExpression(node.condition, (js.Expression condition) {
          addStatement(new js.If(condition, translateInBlock(node.then),
              translateInBlock(node.otherwise)));
        }, store: false);
        return;
      }
  
negative.code:       bool oldInsideUntranslated = insideUntranslatedBreakable;
        insideUntranslatedBreakable = true;
        withExpression(node.condition, (js.Expression condition) {
          addStatement(new js.While(condition, translateToStatement(node.body)));
        }, store: false);
        insideUntranslatedBreakable = oldInsideUntranslated;
        return;
  