anchor.diff:      return list;
     }
   
  -  List<List<DartType>> fillTypes2({bool isFfi = false, int limit = 4}) {
  +  List<List<DartType>> fillTypes2(
  +      {bool isFfi = false, int limit2 = 4, int limit1 = 4}) {
       final list = <List<DartType>>[];
  -    for (int i = 0, n = 1 + rand.nextInt(limit); i < n; i++) {
  -      list.add(fillTypes1(isFfi: isFfi));
  +    for (int i = 0, n = 1 + rand.nextInt(limit2); i < n; i++) {
  +      list.add(fillTypes1(limit: limit1, isFfi: isFfi));
       }
       return list;
     }
   
  -  List<List<List<DartType>>> fillTypes3(int n) {
  +  List<List<List<DartType>>> fillTypes3(int n,
  +      {int limit2 = 4, int limit1 = 4}) {
       final list = <List<List<DartType>>>[];
       for (int i = 0; i < n; i++) {
  -      list.add(fillTypes2());
  +      list.add(fillTypes2(limit2: limit2, limit1: limit1));
       }
       return list;
     }
  
positive.code:     }
    }
  
    List<DartType> fillTypes1({bool isFfi = false}) {
      final list = <DartType>[];
      for (int i = 0, n = 1 + rand.nextInt(4); i < n; i++) {
        if (isFfi) {
          list.add(fp ? oneOf([DartType.INT, DartType.DOUBLE]) : DartType.INT);
        } else {
  
negative.code: 
    // Emit statements. Returns true if code may fall-through.
    bool emitStatements(int depth) {
      int s = 1 + rand.nextInt(numStatements);
      for (int i = 0; i < s; i++) {
        if (!emitStatement(depth)) {
          return false; // rest would be dead code
  