anchor.diff:    js.Statement buildBodyStatement(tree_ir.Statement statement) {
       List<js.Statement> savedAccumulator = accumulator;
       accumulator = <js.Statement>[];
  -    visitStatement(statement);
  +    while (statement != null) {
  +      statement = visitStatement(statement);
  +    }
       js.Statement result = _bodyAsStatement();
       accumulator = savedAccumulator;
       return result;
  
positive.code:   js.Fun buildFunction(tree_ir.FunctionDefinition function) {
      registerDefaultParameterValues(function.element);
      currentFunction = function.element;
      visitStatement(function.body);
  
      List<js.Parameter> parameters = new List<js.Parameter>();
      Set<tree_ir.Variable> parameterSet = new Set<tree_ir.Variable>();
  
negative.code:     if (thenHasFallthrough) {
        js.Statement elseBody = buildBodyStatement(node.elseStatement);
        accumulator.add(new js.If(condition, thenBody, elseBody));
        return null;
      } else {
        // The 'then' body cannot complete normally, so emit a short 'if'
        // and put the 'else' body after it.
        accumulator.add(new js.If.noElse(condition, thenBody));
        return node.elseStatement;
      }
    }
  
    @override
    visitLabeledStatement(tree_ir.LabeledStatement node) {
      fallthrough.push(node.next);
      js.Statement body = buildBodyStatement(node.body);
      fallthrough.pop();
      accumulator.add(insertLabel(node.label, body));
      return node.next;
    }
  
    /// Creates a name for [label] if it does not already have one.
  