public static Cons walkUnwindProtectSpecialTree(Cons tree, Object [] MV_returnarray) {
    { Cons bindings = ((Cons)(tree.rest.value));
      Cons body = tree.rest.rest;
      Symbol variable = null;
      Symbol oldvaluevariable = null;
      Cons oldvaluebindings = Stella.NIL;
      Cons bindtrees = Stella.NIL;
      Cons unbindtrees = Stella.NIL;

      { Cons binding = null;
        Cons iter000 = bindings;

        for (;!(iter000 == Stella.NIL); iter000 = iter000.rest) {
          binding = ((Cons)(iter000.value));
          variable = ((Symbol)(binding.value));
          bindtrees = Cons.cons(Cons.list$(Cons.cons(Stella.SYM_STELLA_SETQ, Cons.cons(variable, Cons.cons(Cons.cons(binding.rest.value, Stella.NIL), Stella.NIL)))), bindtrees);
          oldvaluevariable = Stella.localGensym("OLD-" + variable.symbolName);
          Symbol.pushSpecial(variable, oldvaluevariable);
          oldvaluebindings = Cons.cons(Cons.cons(oldvaluevariable, Cons.cons(variable, Stella.NIL)), oldvaluebindings);
          unbindtrees = Cons.cons(Cons.list$(Cons.cons(Stella.SYM_STELLA_SETQ, Cons.cons(variable, Cons.cons(Cons.cons(oldvaluevariable, Stella.NIL), Stella.NIL)))), unbindtrees);
        }
      }
      tree = ((Cons)(Stella_Object.walkATree(Cons.list$(Cons.cons(Stella.SYM_STELLA_LET, Cons.cons(oldvaluebindings.reverse(), Cons.cons(bindtrees.reverse().concatenate(Cons.cons(Cons.list$(Cons.cons(Stella.SYM_STELLA_UNWIND_PROTECT, Cons.cons(Cons.prognify(body), Cons.cons(unbindtrees.concatenate(Stella.NIL, Stella.NIL), Stella.NIL)))), Stella.NIL), Stella.NIL), Stella.NIL)))), new Object[1])));
      { Cons binding = null;
        Cons iter001 = bindings;

        for (;!(iter001 == Stella.NIL); iter001 = iter001.rest) {
          binding = ((Cons)(iter001.value));
          binding = binding;
          Stella.popSpecial();
        }
      }
      { Cons _return_temp = tree;

        MV_returnarray[0] = Stella.SGT_STELLA_VOID;
        return (_return_temp);
      }
    }
  }