public static Stella_Object walkExpressionTree(Stella_Object exptree, StandardObject targettype, Symbol operatorname, boolean vrletisokP, Object [] MV_returnarray) {
    { Object old$Targettype$000 = Stella.$TARGETTYPE$.get();

      try {
        Native.setSpecial(Stella.$TARGETTYPE$, ((targettype != null) ? ((StandardObject)(targettype)) : Stella.SGT_STELLA_UNKNOWN));
        { Stella_Object oexp = null;
          StandardObject sourcetype = null;

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

            oexp = Stella_Object.walkATree(exptree, caller_MV_returnarray);
            sourcetype = ((StandardObject)(caller_MV_returnarray[0]));
          }
          if (Stella_Object.vrletExpressionP(oexp)) {
            if (!(vrletisokP)) {
              { 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(" Illegal procedural expression as argument to `" + Stella_Object.deUglifyParseTree(operatorname) + "':");
                      Stella.STANDARD_ERROR.nativeStream.println("   `" + Stella_Object.deUglifyParseTree(exptree) + "'.");
                    }
;
                  }

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

              MV_returnarray[0] = sourcetype;
              return (_return_temp);
            }
          }
          if (StandardObject.voidP(sourcetype) &&
              (!StandardObject.voidP(targettype))) {
            { Object old$PrintreadablyP$001 = 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(" Illegal argument to `" + Stella_Object.deUglifyParseTree(operatorname) + "':");
                    Stella.STANDARD_ERROR.nativeStream.println("   `" + Stella_Object.deUglifyParseTree(oexp) + "'");
                    Stella.STANDARD_ERROR.nativeStream.println("The argument must be an expression, not a statement.");
                  }
;
                }

              } finally {
                Stella.$PRINTREADABLYp$.set(old$PrintreadablyP$001);
              }
            }
            return (Stella_Object.walkDontCallMeTree(oexp, sourcetype, MV_returnarray));
          }
          if (sourcetype == null) {
            sourcetype = Stella.SGT_STELLA_UNKNOWN;
          }
          if (targettype == null) {
            targettype = sourcetype;
          }
          return (Stella_Object.coerceATree(oexp, sourcetype, targettype, MV_returnarray));
        }

      } finally {
        Stella.$TARGETTYPE$.set(old$Targettype$000);
      }
    }
  }