From 69ab0d02d980c919c6aac609d2039c7110eeea30 Mon Sep 17 00:00:00 2001 From: Alex Shinn Date: Sun, 28 Jun 2009 02:05:13 +0900 Subject: [PATCH] using names from type specs for unreadable objects in sexp_write --- include/chibi/sexp.h | 1 + sexp.c | 94 +++++--------------------------------------- 2 files changed, 10 insertions(+), 85 deletions(-) diff --git a/include/chibi/sexp.h b/include/chibi/sexp.h index 869283c1..9f8005cf 100644 --- a/include/chibi/sexp.h +++ b/include/chibi/sexp.h @@ -85,6 +85,7 @@ enum sexp_types { SEXP_LIT, SEXP_STACK, SEXP_CONTEXT, + SEXP_NUM_TYPES, }; typedef unsigned long sexp_uint_t; diff --git a/sexp.c b/sexp.c index 3fa39a7d..3321630c 100644 --- a/sexp.c +++ b/sexp.c @@ -824,91 +824,6 @@ void sexp_write (sexp ctx, sexp obj, sexp out) { sexp_write(ctx, sexp_bytecode_name(sexp_procedure_code(obj)), out); sexp_write_string(ctx, ">", out); break; - case SEXP_IPORT: - sexp_write_string(ctx, "#", out); break; - case SEXP_OPORT: - sexp_write_string(ctx, "#", out); break; - case SEXP_CORE: - sexp_write_string(ctx, "#", out); break; - case SEXP_OPCODE: - sexp_write_string(ctx, "#", out); break; - case SEXP_BYTECODE: - sexp_write_string(ctx, "#", out); break; - case SEXP_ENV: - sexp_write_string(ctx, "#", out); break; -/* sexp_printf(out, "# 5) { */ -/* sexp_write_char(' ', out); */ -/* sexp_write(sexp_caar(x), out); */ -/* sexp_write_string(": ", out); */ -/* if ((! sexp_cdar(x)) || sexp_pointerp(sexp_cdar(x))) */ -/* sexp_printf(out, "%p", sexp_cdar(x)); */ -/* else */ -/* sexp_write(sexp_cdar(x), out); */ -/* sexp_write_string(" ...", out); */ -/* } else for ( ; x && sexp_pairp(x); x=sexp_cdr(x)) { */ -/* sexp_write_char(' ', out); */ -/* sexp_write(sexp_caar(x), out); */ -/* sexp_write_string(": ", out); */ -/* if ((! sexp_cdar(x)) || sexp_pointerp(sexp_cdar(x))) */ -/* sexp_printf(out, "%p", sexp_cdar(x)); */ -/* else */ -/* sexp_write(sexp_cdar(x), out); */ -/* } */ -/* sexp_write_char('>', out); */ - break; - case SEXP_EXCEPTION: - sexp_write_string(ctx, "#", out); break; - case SEXP_MACRO: - sexp_write_string(ctx, "#", out); break; -#if USE_DEBUG - case SEXP_LAMBDA: - sexp_write_string(ctx, "#', out); */ - break; - case SEXP_SEQ: - sexp_write_string(ctx, "#', out); - break; - case SEXP_CND: - sexp_write_string(ctx, "#', out); - break; - case SEXP_REF: - sexp_write_string(ctx, "#", out); -/* sexp_write_string("#", sexp_ref_loc(obj)); */ - break; - case SEXP_SET: - sexp_write_string(ctx, "#", out); - break; - case SEXP_SYNCLO: - sexp_write_string(ctx, "#", out); - break; -#endif - case SEXP_TYPE: - sexp_write_string(ctx, "#", out); - break; case SEXP_STRING: sexp_write_char(ctx, '"', out); i = sexp_string_length(obj); @@ -934,6 +849,15 @@ void sexp_write (sexp ctx, sexp obj, sexp out) { sexp_write_char(ctx, str[0], out); } break; + default: + i = sexp_pointer_tag(obj); + sexp_write_string(ctx, "#<", out); + sexp_write_string(ctx, + (i < SEXP_NUM_TYPES) + ? sexp_type_name(&(sexp_type_specs[i])) : "invalid", + out); + sexp_write_char(ctx, '>', out); + break; } } else if (sexp_integerp(obj)) { sprintf(numbuf, "%ld", sexp_unbox_integer(obj));