anchor.diff:  // Version of DartFuzz. Increase this each time changes are made
   // to preserve the property that a given version of DartFuzz yields
   // the same fuzzed program for a deterministic random seed.
  -const String version = '1.17';
  +const String version = '1.18';
   
   // Restriction on statements and expressions.
   const int stmtLength = 2;
  
positive.code:     emitLn('while (--$localName$i > 0) {');
      indent += 2;
      nest++;
      localVars.add(DartType.INT);
      emitStatements(depth + 1);
      localVars.removeLast();
      nest--;
      indent -= 2;
      emitLn('}');
  
negative.code:         if (tp == proto[i]) choices.add('$paramName$i');
        }
      }
      // Remove possible modification of the iteration variable from the loop
      // body.
      if (isLhs) {
        if (rand.nextInt(10) != 0) {
          Set<String> cleanChoices = choices.difference(Set.from(iterVars));
          if (cleanChoices.length > 0) {
            choices = cleanChoices;
          }
        }
      }
      // Then pick one.
      assert(choices.length > 0);
      emit('${choices.elementAt(rand.nextInt(choices.length))}');
    }
  
    void emitSubscriptedVar(int depth, DartType tp, {bool isLhs = false}) {
      if (tp == DartType.INT) {
        emitScalarVar(DartType.INT_LIST, isLhs: isLhs);
        emit('[');
        emitExpr(depth + 1, DartType.INT);
        emit(']');
      } else if (tp == DartType.STRING) {
        emitScalarVar(DartType.INT_STRING_MAP, isLhs: isLhs);
        emit('[');
        emitExpr(depth + 1, DartType.INT);
        emit(']');
      } else {
        emitScalarVar(tp, isLhs: isLhs); // resort to scalar
      }
    }
  
    void emitVar(int depth, DartType tp, {bool isLhs = false}) {
      switch (rand.nextInt(2)) {
        case 0:
          emitScalarVar(tp, isLhs: isLhs);
          break;
        default:
          emitSubscriptedVar(depth, tp, isLhs: isLhs);
          break;
      }
    }
  