anchor.diff:              initialization = null;
             }
           }
  -        addIndentation();
           for (LabelElement label in info.labels) {
             if (label.isTarget) {
               writeLabel(label);
               buffer.add(":");
             }
           }
  -        if (info.updates !== null && isExpression(info.updates)) {
  +        if (isConditionExpression &&
  +            info.updates !== null && isJSExpression(info.updates)) {
             // If we have an updates graph, and it's expressible as an
             // expression, generate a for-loop.
  +          addIndentation();
             buffer.add("for (");
             if (initialization !== null) {
               if (initializationType != TYPE_DECLARATION) {
  
positive.code:       // If doing this as part of a SubGraph traversal, the
        // calling code will handle the control flow logic.
  
        // Currently we only traverse condition subgraphs as expressions.
        assert(isGeneratingExpression());
        use(node.inputs[0], JSPrecedence.EXPRESSION_PRECEDENCE);
        return;
      }
      HBasicBlock branchBlock = currentBlock;
      handleLoopCondition(node);
      List<HBasicBlock> dominated = currentBlock.dominatedBlocks;
      // For a do while loop, the body has already been visited.
  
negative.code:     if (!isInitializerBlock) return false;
  
      SubExpression condition = info.condition;
      bool isConditionExpression = isJSCondition(condition);
  
      void visitBodyIgnoreLabels() {
        if (info.body.start.isLabeledBlock()) {
  