anchor.diff:          return;
         }
       } else {
  -      // Inside a class: try to call backwards in class methods first.
  -      final int m1 = currentMethod == null
  -          ? classMethods[currentClass].length
  -          : currentMethod;
  +      int classIndex = currentClass;
  +      // Chase randomly up in class hierarchy.
  +      while (classParents[classIndex] > 0) {
  +        if (rand.nextInt(2) == 0) {
  +          break;
  +        }
  +        classIndex = classParents[classIndex];
  +      }
  +      int m1 = 0;
  +      // Inside a class: try to call backwards into current or parent class
  +      // methods first.
  +      if (currentMethod == null || classIndex != currentClass) {
  +        // If currently emitting the 'run' method or calling into a parent class
  +        // pick any of the current or parent class methods respectively.
  +        m1 = classMethods[classIndex].length;
  +      } else {
  +        // If calling into the current class from any method other than 'run'
  +        // pick one of the already emitted methods
  +        // (to avoid infinite recursions).
  +        m1 = currentMethod;
  +      }
         final int m2 = globalMethods.length;
  -      if (pickedCall(depth, tp, '$methodName${currentClass}_',
  -              classMethods[currentClass], m1) ||
  +      if (pickedCall(depth, tp, '$methodName${classIndex}_',
  +              classMethods[classIndex], m1) ||
             pickedCall(depth, tp, methodName, globalMethods, m2)) {
           return;
         }
  
positive.code: 
    // Prototypes of all methods over all classes (first element is return type).
    List<List<List<DartType>>> classMethods;
  }
  
  // Generate seed. By default (no user-defined nonzero seed given),
  
negative.code:   void emitClasses() {
      assert(classFields.length == classMethods.length);
      for (int i = 0; i < classFields.length; i++) {
        if (i == 0) {
          classParents.add(-1);
          emitLn('class X0 {');
        } else {
          final int parentClass = rand.nextInt(i);
          classParents.add(parentClass);
          emitLn('class X$i extends X${parentClass} {');
        }
        indent += 2;
        emitVarDecls('$fieldName${i}_', classFields[i]);
        currentClass = i;
  