public static Cons walkReturnAndUnbindSpecials(Cons tree, Object [] MV_returnarray) {
    { Cons unbindtree = Stella.yieldReturnSpecialUnbindTree();
      Cons valuetrees = tree.rest;
      Cons valuevariables = Stella.NIL;
      Cons valuebindings = Stella.NIL;

      { Object old$SpecialsenabledP$000 = Stella.$SPECIALSENABLEDp$.get();

        try {
          Native.setBooleanSpecial(Stella.$SPECIALSENABLEDp$, false);
          if (valuetrees.length() == 0) {
            return (Cons.walkAConsTree(Cons.list$(Cons.cons(Stella.SYM_STELLA_PROGN, Cons.cons(unbindtree, Cons.cons(Cons.cons(tree, Stella.NIL), Stella.NIL)))), MV_returnarray));
          }
          if ((valuetrees.length() == 1) &&
              (!(((MethodSlot)(Stella.$METHODBEINGWALKED$.get())).methodReturnTypeSpecifiers().rest() == Stella.NIL))) {
            { int i = Stella.NULL_INTEGER;
              int iter000 = 0;
              int upperBound000 = ((MethodSlot)(Stella.$METHODBEINGWALKED$.get())).methodReturnTypeSpecifiers().length() - 1;
              Cons collect000 = null;

              for (;iter000 <= upperBound000; iter000 = iter000 + 1) {
                i = iter000;
                i = i;
                if (collect000 == null) {
                  {
                    collect000 = Cons.cons(Stella.localGensym("RETURN-VALUE"), Stella.NIL);
                    if (valuevariables == Stella.NIL) {
                      valuevariables = collect000;
                    }
                    else {
                      Cons.addConsToEndOfConsList(valuevariables, collect000);
                    }
                  }
                }
                else {
                  {
                    collect000.rest = Cons.cons(Stella.localGensym("RETURN-VALUE"), Stella.NIL);
                    collect000 = collect000.rest;
                  }
                }
              }
            }
            tree.rest = valuevariables;
            return (Cons.walkAConsTree(Cons.list$(Cons.cons(Stella.SYM_STELLA_MV_BIND, Cons.cons(Cons.copyConsList(valuevariables), Cons.cons(Cons.cons(valuetrees.value, Stella_Object.treeToTrees(unbindtree).concatenate(Cons.cons(tree, Stella.NIL), Stella.NIL)), Stella.NIL)))), MV_returnarray));
          }
          { ConsIterator it = valuetrees.allocateIterator();

            while (it.nextP()) {
              if (Stella_Object.consP(it.value) ||
                  (Stella_Object.symbolP(it.value) &&
                   (Symbol.lookupOldValueVariable(((Symbol)(it.value))) != null))) {
                valuebindings = Cons.cons(Cons.cons(Stella.localGensym("RETURN-VALUE"), Cons.cons(it.value, Stella.NIL)), valuebindings);
                it.valueSetter(((Cons)(valuebindings.value)).value);
              }
            }
          }
          return (Cons.walkAConsTree(Cons.list$(Cons.cons(Stella.SYM_STELLA_LET, Cons.cons(valuebindings.reverse(), Cons.cons(Stella_Object.treeToTrees(unbindtree).concatenate(Cons.cons(tree, Stella.NIL), Stella.NIL), Stella.NIL)))), MV_returnarray));

        } finally {
          Stella.$SPECIALSENABLEDp$.set(old$SpecialsenabledP$000);
        }
      }
    }
  }