private void forEachNonSubBlockDepthFirst0(
      BasicBlock next, BasicBlock.Visitor v, BitSet visited) {
    v.visitBlock(next);
    visited.set(next.getLabel());

    IntList successors = next.getSuccessors();
    int sz = successors.size();

    for (int i = 0; i < sz; i++) {
      int succ = successors.get(i);

      if (visited.get(succ)) {
        continue;
      }

      if (isSubroutineCaller(next) && i > 0) {
        // ignore jsr targets
        continue;
      }

      /*
       * Ignore missing labels: they're successors of
       * subroutines that never invoke a ret.
       */
      int idx = labelToResultIndex(succ);
      if (idx >= 0) {
        forEachNonSubBlockDepthFirst0(result.get(idx), v, visited);
      }
    }
  }
Visits each block once in depth-first successor order, ignoring {@code jsr} targets. Worker for
{@link #forEachNonSubBlockDepthFirst}.

@param next next block to visit
@param v callback interface
@param visited set of blocks already visited
android/android_framework/dex-maker/src/main/java/com/android/dx/cf/code/Ropper.java