anchor.diff:     * contains one statement, one expression, or multiple statements.
      */
     int analyzeGraphForCodegen(HStatementInformation graph) {
  -    HBasicBlock start = graph.start;
  -    HBasicBlock end = graph.end;
  -    // Only deal with single blocks for now. TODO(ngeoffray): analyze
  -    // all blocks.
  -    if (start !== end) return MULTIPLE_STATEMENTS;
  -
  +    return analyzeBlocksForCodegen(graph.start, graph.end);
  +  }
  +
  +  int analyzeBlocksForCodegen(HBasicBlock start, HBasicBlock end) {
       int kind = EMPTY;
       bool updateKind(int newKind) {
         if (kind != EMPTY) return false;
  
positive.code:     }
  
      HInstruction last = start.last;
      if (last is !HGoto) {
        if (!updateKind(last.isStatement() ? ONE_STATEMENT : ONE_EXPRESSION)) {
          return MULTIPLE_STATEMENTS;
        }
      }
  
      CopyHandler handler = variableNames.getCopyHandler(start);
  
negative.code:   int expectedPrecedence = JSPrecedence.STATEMENT_PRECEDENCE;
    JSBinaryOperatorPrecedence unsignedShiftPrecedences;
    HGraph currentGraph;
  
    /**
     * Whether the code-generation should try to generate an expression
     * instead of a sequence of statements.
     */
    int generationState = STATE_STATEMENT;
  
    /**
     * Whether we are generating a statement that does not need
     * indentation (e.g. an 'if' in an 'else if').
     */
    bool generatingInlineStatement = false;
  
    HBasicBlock currentBlock;
  
    // Records a block-information that is being handled specially.
  