public static Stella_Object coerceATree(Stella_Object tree, StandardObject sourcetype, StandardObject targettype, Object [] MV_returnarray) {
    { Stella_Object otree = null;
      StandardObject otype = null;
      boolean coercibleP = false;

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

        otree = Stella_Object.helpCoerceATree(tree, sourcetype, targettype, false, caller_MV_returnarray);
        otype = ((StandardObject)(caller_MV_returnarray[0]));
        coercibleP = ((boolean)(((BooleanWrapper)(caller_MV_returnarray[1])).wrapperValue));
      }
      if (!(coercibleP)) {
        { 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(" Type conflict: the expression:");
                Stella.STANDARD_ERROR.nativeStream.println("   `" + Stella_Object.deUglifyParseTree(tree) + "'");
                Stella.STANDARD_ERROR.nativeStream.println(" has type `" + StandardObject.yieldTypeSpecTree(sourcetype) + "' but should have type `" + StandardObject.yieldTypeSpecTree(targettype) + "'.");
              }
;
            }

          } finally {
            Stella.$PRINTREADABLYp$.set(old$PrintreadablyP$000);
          }
        }
      }
      { Stella_Object _return_temp = otree;

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