public static Cons walkChooseTree(Cons tree, Object [] MV_returnarray) {
    { Stella_Object operator = tree.value;
      Stella_Object test = Stella_Object.walkExpressionTree(tree.rest.value, Stella.SGT_STELLA_BOOLEAN, ((Symbol)(operator)), true, new Object[1]);
      Stella_Object temp = null;
      StandardObject type1 = null;
      StandardObject type2 = null;
      StandardObject type = null;

      tree.secondSetter(test);
      if (Stella_Object.vrletExpressionP(test)) {
        return (Cons.percolateOutVrletExpression(tree, ((Cons)(test)), Stella.SGT_STELLA_BOOLEAN, MV_returnarray));
      }
      if (Cons.badArgumentCountP(tree, 3)) {
        return (Stella_Object.walkDontCallMeTree(tree, Stella.SGT_STELLA_UNKNOWN, MV_returnarray));
      }
      { Object [] caller_MV_returnarray = new Object[1];

        temp = Stella_Object.walkExpressionTree(tree.rest.rest.value, ((StandardObject)(Stella.$TARGETTYPE$.get())), Stella.SYM_STELLA_CHOOSE, true, caller_MV_returnarray);
        type1 = ((StandardObject)(caller_MV_returnarray[0]));
      }
      tree.thirdSetter(temp);
      { Object [] caller_MV_returnarray = new Object[1];

        temp = Stella_Object.walkExpressionTree(tree.fourth(), ((StandardObject)(Stella.$TARGETTYPE$.get())), Stella.SYM_STELLA_CHOOSE, true, caller_MV_returnarray);
        type2 = ((StandardObject)(caller_MV_returnarray[0]));
      }
      tree.fourthSetter(temp);
      if (type1 == Stella.SGT_STELLA_UNKNOWN) {
        type = type2;
        tree.thirdSetter(Stella_Object.coerceATree(tree.rest.rest.value, type1, type, new Object[1]));
      }
      else if (type2 == Stella.SGT_STELLA_UNKNOWN) {
        type = type1;
        tree.fourthSetter(Stella_Object.coerceATree(tree.fourth(), type2, type, new Object[1]));
      }
      else {
        type = StandardObject.twoArgumentLeastCommonSupertype(type1, type2);
      }
      if ((type == Stella.SGT_STELLA_VOID) ||
          ((!StandardObject.subTypeSpecOfP(type, Stella.SGT_STELLA_OBJECT)) &&
           StandardObject.typeSpecToClass(type).abstractP)) {
        { 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(" Incompatible subexpression types `" + Stella_Object.deUglifyParseTree(type1) + "' and `" + Stella_Object.deUglifyParseTree(type2) + "'");
                Stella.STANDARD_ERROR.nativeStream.println(" in 'choose' expression..");
              }
;
            }

          } finally {
            Stella.$PRINTREADABLYp$.set(old$PrintreadablyP$000);
          }
        }
      }
      if (Stella_Object.vrletExpressionP(tree.rest.rest.value) ||
          Stella_Object.vrletExpressionP(tree.fourth())) {
        { Symbol resultvariable = Stella.localGensym("CHOOSE-VALUE");

          { Stella_Object value000 = null;
            StandardObject value001 = null;

            { Object [] caller_MV_returnarray = new Object[1];

              value000 = Stella_Object.walkATree(Cons.list$(Cons.cons(Stella.SYM_STELLA_VRLET, Cons.cons(Cons.cons(Cons.cons(resultvariable, Cons.cons(type, Cons.cons(Stella.SYM_STELLA_NULL, Stella.NIL))), Stella.NIL), Cons.cons(Cons.list$(Cons.cons(Stella.SYM_STELLA_IF, Cons.cons(tree.rest.value, Cons.cons(Cons.list$(Cons.cons(Cons.list$(Cons.cons(Stella.SYM_STELLA_SETQ, Cons.cons(resultvariable, Cons.cons(Cons.cons(tree.rest.rest.value, Stella.NIL), Stella.NIL)))), Cons.cons(Cons.list$(Cons.cons(Stella.SYM_STELLA_SETQ, Cons.cons(resultvariable, Cons.cons(Cons.cons(tree.fourth(), Stella.NIL), Stella.NIL)))), Cons.cons(Stella.NIL, Stella.NIL)))), Stella.NIL)))), Cons.cons(resultvariable, Cons.cons(Stella.NIL, Stella.NIL)))))), caller_MV_returnarray);
              value001 = ((StandardObject)(caller_MV_returnarray[0]));
            }
            { Cons _return_temp = ((Cons)(value000));

              MV_returnarray[0] = value001;
              return (_return_temp);
            }
          }
        }
      }
      if (((Keyword)(Stella.$TRANSLATOROUTPUTLANGUAGE$.get())) == Stella.KWD_COMMON_LISP) {
      }
      else {
        if ((!(type1 == type)) &&
            (!StandardObject.subTypeSpecOfP(type1, type2))) {
          tree.thirdSetter(Cons.list$(Cons.cons(Stella.SYM_STELLA_CAST, Cons.cons(tree.rest.rest.value, Cons.cons(Cons.cons(type, Stella.NIL), Stella.NIL)))));
        }
        if ((!(type2 == type)) &&
            (!StandardObject.subTypeSpecOfP(type2, type1))) {
          tree.fourthSetter(Cons.list$(Cons.cons(Stella.SYM_STELLA_CAST, Cons.cons(tree.fourth(), Cons.cons(Cons.cons(type, Stella.NIL), Stella.NIL)))));
        }
      }
      { Cons _return_temp = tree;

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