public static void heapSortSiftDown(edu.isi.stella.Stella_Object[] vector, int start, int end, java.lang.reflect.Method predicate) {
    { int root = start;
      int child = 0;
      Stella_Object aux = null;

      loop000 : for (;;) {
        child = (root << 1) + 1;
        if (child > end) {
          break loop000;
        }
        if ((child < end) &&
            ((Boolean)(edu.isi.stella.javalib.Native.funcall(predicate, null, new java.lang.Object [] {vector[child], vector[(child + 1)]}))).booleanValue()) {
          child = child + 1;
        }
        if (((Boolean)(edu.isi.stella.javalib.Native.funcall(predicate, null, new java.lang.Object [] {vector[root], vector[child]}))).booleanValue()) {
          aux = vector[root];
          vector[root] = (vector[child]);
          vector[child] = aux;
          root = child;
        }
        else {
          return;
        }
      }
    }
  }