static void sexp_print_simple (sexp ctx, sexp x, sexp out, int depth) { int i; if ((!sexp_pointerp(x)) || sexp_symbolp(x) || sexp_stringp(x) || sexp_flonump(x) || sexp_bignump(x)) { sexp_write(ctx, x, out); } else if (depth <= 0) { goto print_name; } else if (sexp_synclop(x)) { sexp_write_string(ctx, "#<sc ", out); sexp_print_simple(ctx, sexp_synclo_expr(x), out, depth); sexp_write_string(ctx, ">", out); } else if (sexp_pairp(x)) { sexp_write_char(ctx, '(', out); sexp_print_simple(ctx, sexp_car(x), out, depth-1); sexp_write_string(ctx, " . ", out); sexp_print_simple(ctx, sexp_cdr(x), out, depth-1); sexp_write_char(ctx, ')', out); } else if (sexp_vectorp(x)) { sexp_write_string(ctx, "#(", out); for (i=0; i<SEXP_HEAP_VECTOR_DEPTH && i<(int)sexp_vector_length(x); i++) { if (i>0) sexp_write_char(ctx, ' ', out); sexp_print_simple(ctx, sexp_vector_ref(x, i), out, depth-1); } if (i<(int)sexp_vector_length(x)) sexp_write_string(ctx, " ...", out); sexp_write_char(ctx, ')', out); } else { print_name: sexp_write_string(ctx, "#<", out); sexp_write(ctx, sexp_object_type_name(ctx, x), out); sexp_write_string(ctx, ">", out); } }
static sexp sexp_type_of (sexp ctx, sexp self, sexp_sint_t n, sexp x) { if (sexp_pointerp(x)) return sexp_object_type(ctx, x); else if (sexp_fixnump(x)) return sexp_type_by_index(ctx, SEXP_FIXNUM); else if (sexp_booleanp(x)) return sexp_type_by_index(ctx, SEXP_BOOLEAN); else if (sexp_charp(x)) return sexp_type_by_index(ctx, SEXP_CHAR); #if SEXP_USE_HUFF_SYMS else if (sexp_symbolp(x)) return sexp_type_by_index(ctx, SEXP_SYMBOL); #endif #if SEXP_USE_IMMEDIATE_FLONUMS else if (sexp_flonump(x)) return sexp_type_by_index(ctx, SEXP_FLONUM); #endif else return sexp_type_by_index(ctx, SEXP_OBJECT); }