void sprint_signed_decimal(signed_natural n) { if (n < 0) { add_char('-'); n = -n; } sprint_unsigned_decimal(n); }
void sprint_tra(LispObj o, int depth) { #ifdef X8664 signed sdisp; unsigned disp = 0; LispObj f = 0; if ((*((unsigned short *)o) == RECOVER_FN_FROM_RIP_WORD0) && (*((unsigned char *)(o+2)) == RECOVER_FN_FROM_RIP_BYTE2)) { sdisp = (*(int *) (o+3)); f = RECOVER_FN_FROM_RIP_LENGTH+o+sdisp; disp = o-f; } if (fulltag_of(f) == fulltag_function) { add_c_string("tagged return address: "); sprint_function(f, depth); add_c_string(" + "); sprint_unsigned_decimal(disp); } else { add_c_string("(tra ?) : "); sprint_unsigned_hex(o); } #else LispObj f = 0; unsigned disp = 0; if (*(unsigned char *)o == RECOVER_FN_OPCODE) { f = (LispObj)(*((natural *)(o + 1))); disp = o - f; } if (f && header_subtag(header_of(f)) == subtag_function) { add_c_string("tagged return address: "); sprint_function(f, depth); add_c_string(" + "); sprint_unsigned_decimal(disp); } else { add_c_string("(tra ?) : "); sprint_unsigned_hex(o); } #endif }
void sprint_random_vector(LispObj o, unsigned subtag, natural elements) { add_c_string("#<"); sprint_unsigned_decimal(elements); add_c_string("-element vector subtag = "); sprintf(numbuf, "%02X @", subtag); add_c_string(numbuf); sprint_unsigned_hex(o); add_c_string(" ("); add_c_string(vector_subtag_name(subtag)); add_c_string(")>"); }
void sprint_random_vector(LispObj o, unsigned subtag, natural elements) { add_c_string("#<"); sprint_unsigned_decimal(elements); add_c_string("-element vector subtag = #x"); add_char(digits[subtag>>4]); add_char(digits[subtag&15]); add_c_string(" @"); sprint_unsigned_hex(o); add_c_string(" ("); add_c_string(vector_subtag_name(subtag)); add_c_string(")>"); }
void sprint_ivector(LispObj o) { LispObj header = header_of(o); unsigned elements = header_element_count(header), subtag = header_subtag(header); switch(subtag) { case subtag_simple_base_string: add_char('"'); add_lisp_base_string(o); add_char('"'); return; case subtag_bignum: if (elements == 1) { sprint_signed_decimal((signed_natural)(deref(o, 1))); return; } if ((elements == 2) && (deref(o, 2) == 0)) { sprint_unsigned_decimal(deref(o, 1)); return; } break; case subtag_double_float: break; case subtag_macptr: add_c_string("#<MACPTR "); sprint_unsigned_hex(deref(o,1)); add_c_string(">"); break; default: sprint_random_vector(o, subtag, elements); } }