public static Cons walkArefTree(Cons tree, Object [] MV_returnarray) {
    { Stella_Object operator = tree.value;
      Stella_Object otree = null;
      StandardObject otype = null;
      ParametricTypeSpecifier arraytype = null;
      StandardObject elementtype = null;
      Cons arguments = tree.rest;

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

        otree = Stella_Object.walkExpressionTree(arguments.value, Stella.SGT_STELLA_ARRAY, ((Symbol)(operator)), true, caller_MV_returnarray);
        otype = ((StandardObject)(caller_MV_returnarray[0]));
      }
      if (Stella_Object.vrletExpressionP(otree)) {
        arguments.firstSetter(otree);
        return (Cons.percolateOutVrletExpression(tree, ((Cons)(otree)), Stella.SGT_STELLA_UNKNOWN, MV_returnarray));
      }
      if (!(StandardObject.arrayTypeSpecifierP(otype))) {
        return (Stella_Object.walkDontCallMeTree(tree, Stella.SGT_STELLA_UNKNOWN, MV_returnarray));
      }
      arraytype = ((ParametricTypeSpecifier)(otype));
      elementtype = StandardObject.extractParameterType(arraytype, Stella.SYM_STELLA_ANY_VALUE, new Object[1]);
      { boolean testValue000 = false;

        testValue000 = ParametricTypeSpecifier.indefiniteArrayTypeP(arraytype);
        if (testValue000) {
          { boolean alwaysP000 = true;

            { IntegerWrapper dim = null;
              Cons iter000 = ParametricTypeSpecifier.arrayTypeDimensions(arraytype).rest();

              loop000 : for (;!(iter000 == Stella.NIL); iter000 = iter000.rest) {
                dim = ((IntegerWrapper)(iter000.value));
                if (!(dim != null)) {
                  alwaysP000 = false;
                  break loop000;
                }
              }
            }
            testValue000 = alwaysP000;
          }
          testValue000 = !testValue000;
        }
        if (testValue000) {
          { 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(" Can't AREF underspecified array type");
                  Stella.STANDARD_ERROR.nativeStream.println("   `" + Stella_Object.deUglifyParseTree(arraytype) + "' in");
                  Stella.STANDARD_ERROR.nativeStream.println("   `" + Stella_Object.deUglifyParseTree(tree) + "'.");
                }
;
              }

            } finally {
              Stella.$PRINTREADABLYp$.set(old$PrintreadablyP$000);
            }
          }
          return (Stella_Object.walkDontCallMeTree(tree, Stella.SGT_STELLA_UNKNOWN, MV_returnarray));
        }
      }
      arguments.firstSetter(otree);
      arguments = arguments.rest;
      if (operator == Stella.SYM_STELLA_AREF_SETTER) {
        { Object [] caller_MV_returnarray = new Object[1];

          otree = Stella_Object.walkExpressionTree(arguments.value, elementtype, ((Symbol)(operator)), true, caller_MV_returnarray);
          otype = ((StandardObject)(caller_MV_returnarray[0]));
        }
        arguments.firstSetter(otree);
        if (Stella_Object.vrletExpressionP(otree)) {
          return (Cons.percolateOutVrletExpression(tree, ((Cons)(otree)), Stella.SGT_STELLA_UNKNOWN, MV_returnarray));
        }
        arguments = arguments.rest;
      }
      if (!(arguments.length() == ParametricTypeSpecifier.arrayTypeRank(arraytype))) {
        { 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(" AREF indices don't match the rank of the array in");
                Stella.STANDARD_ERROR.nativeStream.println("   `" + Stella_Object.deUglifyParseTree(tree) + "'.");
              }
;
            }

          } finally {
            Stella.$PRINTREADABLYp$.set(old$PrintreadablyP$001);
          }
        }
      }
      while (!(arguments == Stella.NIL)) {
        { Object [] caller_MV_returnarray = new Object[1];

          otree = Stella_Object.walkExpressionTree(arguments.value, Stella.SGT_STELLA_INTEGER, ((Symbol)(operator)), true, caller_MV_returnarray);
          otype = ((StandardObject)(caller_MV_returnarray[0]));
        }
        arguments.firstSetter(otree);
        if (Stella_Object.vrletExpressionP(otree)) {
          return (Cons.percolateOutVrletExpression(tree, ((Cons)(otree)), Stella.SGT_STELLA_UNKNOWN, MV_returnarray));
        }
        arguments = arguments.rest;
      }
      return (Stella_Object.sysTree(Cons.list$(Cons.cons(Stella.SYM_STELLA_SYS_CALL_METHOD, Cons.cons(arraytype.specifierBaseType, Cons.cons(Cons.cons(operator, Cons.cons(Stella_Object.sysTree(tree.rest.value, arraytype, new Object[1]), tree.rest.rest.concatenate(Stella.NIL, Stella.NIL))), Stella.NIL)))), elementtype, MV_returnarray));
    }
  }