* @param body
   * @return Stella_Object
   */
  public static Stella_Object signal(Symbol type, Cons body) {
    if (type == Stella.SYM_STELLA_NULL) {
      type = Stella.SYM_STELLA_STELLA_EXCEPTION;
    }
    if ((body.length() == 1) &&
        Stella_Object.isaP(body.value, Stella.SGT_STELLA_STRING_WRAPPER)) {
      return (Cons.list$(Cons.cons(Stella.SYM_STELLA_SIGNAL_EXCEPTION, Cons.cons(Cons.list$(Cons.cons(Stella.SYM_STELLA_NEW, Cons.cons(type, Cons.cons(Cons.list$(Cons.cons(Stella.KWD_MESSAGE, Cons.cons(body.value, Cons.cons(Stella.NIL, Stella.NIL)))), Stella.NIL)))), Cons.cons(Stella.NIL, Stella.NIL)))));
    }
    else {
      { Symbol streamvar = Stella.localGensym("STREAM");

        return (Cons.list$(Cons.cons(Stella.SYM_STELLA_LET, Cons.cons(Cons.cons(Cons.cons(streamvar, Cons.cons(Cons.list$(Cons.cons(Stella.SYM_STELLA_NEW, Cons.cons(Stella.SYM_STELLA_OUTPUT_STRING_STREAM, Cons.cons(Stella.NIL, Stella.NIL)))), Stella.NIL)), Stella.NIL), Cons.cons(Cons.list$(Cons.cons(Stella.SYM_STELLA_PRINT_STREAM, Cons.cons(streamvar, Cons.cons(Cons.formatMessageArguments(body, false).concatenate(Stella.NIL, Stella.NIL), Stella.NIL)))), Cons.cons(Cons.list$(Cons.cons(Stella.SYM_STELLA_SIGNAL_EXCEPTION, Cons.cons(Cons.list$(Cons.cons(Stella.SYM_STELLA_NEW, Cons.cons(type, Cons.cons(Cons.list$(Cons.cons(Stella.KWD_MESSAGE, Cons.cons(Cons.list$(Cons.cons(Stella.SYM_STELLA_THE_STRING, Cons.cons(streamvar, Cons.cons(Stella.NIL, Stella.NIL)))), Cons.cons(Stella.NIL, Stella.NIL)))), Stella.NIL)))), Cons.cons(Stella.NIL, Stella.NIL)))), Cons.cons(Stella.NIL, Stella.NIL)))))));
      }
    }
  }