anchor.diff:            currentClass = null;
           }
         }
  -      if (rand.nextInt(2) == 0 || classParents.length > parentClass) {
  +      // TODO(bkonyi): change to use coinFlip()
  +      if (rollDice(2) || classParents.length > parentClass) {
           break;
         } else {
           parentClass = classParents[parentClass];
  
positive.code:       emitLn('${method[0].name} $name$index(', newline: false);
      }
      emitParDecls(method);
      if (!isFfiMethod && rand.nextInt(10) == 0) {
        // Emit a method using "=>" syntax.
        emit(') => ');
        emitExpr(0, method[0]);
        emit(';', newline: true);
        return;
      }
      emit(') {', newline: true);
      indent += 2;
      assert(localVars.isEmpty);
      if (emitStatements(0)) {
        emitReturn();
      }
      assert(localVars.isEmpty);
      indent -= 2;
      emitLn('}');
      if (isFfiMethod) {
        emitFfiCast("${name}${index}", "${name}Ffi${index}",
            "${name}Ffi${index}Type", method);
  
negative.code:     if (choices.isEmpty) {
        throw 'No variable to emit for type ${tp.name}';
      }
      final emittedVar = '${choices.elementAt(choose(choices.length))}';
      if (rhsFilter != null && (emittedVar == rhsFilter.lhsVar)) {
        rhsFilter.consume();
      }
  