public static void manualDescribeObject(Stella_Object renamed_Object, Stella_Object specification, OutputStream stream) {
    if (renamed_Object == null) {
      renamed_Object = Utilities.lookupObjectFromSpecification(specification);
    }
    if (((Keyword)(Utilities.$MANUAL_OUTPUT_LANGUAGE$.get())) == Utilities.KWD_TEXINFO) {
      if (renamed_Object == null) {
        if (specification != null) {
          Utilities.texinfoDescribeUnimplementedObject(specification, stream);
        }
      }
      else {
        { Surrogate testValue000 = Stella_Object.safePrimaryType(renamed_Object);

          if (Surrogate.subtypeOfP(testValue000, Utilities.SGT_STELLA_GLOBAL_VARIABLE)) {
            { GlobalVariable object000 = ((GlobalVariable)(renamed_Object));

              Utilities.texinfoDescribeVariable(object000, stream);
            }
          }
          else if (Surrogate.subtypeOfClassP(testValue000)) {
            { Stella_Class object000 = ((Stella_Class)(renamed_Object));

              Utilities.texinfoDescribeClass(object000, stream);
            }
          }
          else if (Surrogate.subtypeOfMethodSlotP(testValue000)) {
            { MethodSlot object000 = ((MethodSlot)(renamed_Object));

              Utilities.texinfoDescribeMethod(object000, stream);
            }
          }
          else if (Surrogate.subtypeOfP(testValue000, Utilities.SGT_STELLA_MODULE)) {
            { Module object000 = ((Module)(renamed_Object));

              Utilities.manualDescribeUncategorizedObjects(object000, stream);
            }
          }
          else {
            { Symbol handlername = Symbol.internSymbolInModule("TEXINFO-DESCRIBE-" + renamed_Object.primaryType().symbolName, ((Module)(Utilities.SYM_UTILITIES_MANUAL_DESCRIBE_OBJECT.homeContext)), true);
              MethodSlot handler = Symbol.lookupFunction(handlername);

              if (handler != null) {
                edu.isi.stella.javalib.Native.funcall(handler.functionCode, null, new java.lang.Object [] {renamed_Object, stream});
              }
            }
          }
        }
        Utilities.registerDocumentedObject(renamed_Object);
      }
    }
    else {
      { OutputStringStream stream000 = OutputStringStream.newOutputStringStream();

        stream000.nativeStream.print("`" + ((Keyword)(Utilities.$MANUAL_OUTPUT_LANGUAGE$.get())) + "' is not a valid case option");
        throw ((StellaException)(StellaException.newStellaException(stream000.theStringReader()).fillInStackTrace()));
      }
    }
  }