public static Cons extractDoClause(Cons tail, Object [] MV_returnarray) {
    if (!(tail.value == Stella.SYM_STELLA_DO)) {
      { Cons _return_temp = null;

        MV_returnarray[0] = tail;
        return (_return_temp);
      }
    }
    { Cons doclause = tail;
      Cons lastdocons = null;

      tail = tail.rest;
      while ((!(tail == Stella.NIL)) &&
          (!(tail.value == Stella.SYM_STELLA_COLLECT))) {
        lastdocons = tail;
        tail = tail.rest;
      }
      if (lastdocons == null) {
        {
          { Object old$PrintreadablyP$000 = Stella.$PRINTREADABLYp$.get();

            try {
              Native.setBooleanSpecial(Stella.$PRINTREADABLYp$, true);
              Stella.signalTranslationError();
              if (!(Stella.suppressWarningsP())) {
                Stella.printErrorContext(">> ERROR: ", Stella.STANDARD_ERROR);
                {
                  Stella.STANDARD_ERROR.nativeStream.println();
                  Stella.STANDARD_ERROR.nativeStream.println(" Missing arguments to DO separator.");
                }
;
              }

            } finally {
              Stella.$PRINTREADABLYp$.set(old$PrintreadablyP$000);
            }
          }
          doclause.rest = Cons.consList(Cons.cons(Stella_Object.walkDontCallMeTree(Stella.NIL, Stella.SGT_STELLA_VOID, new Object[1]), Stella.NIL));
        }
      }
      else {
        lastdocons.rest = Stella.NIL;
      }
      { Cons _return_temp = doclause;

        MV_returnarray[0] = tail;
        return (_return_temp);
      }
    }
  }