Mercurial > lbo > hg > ylisp
changeset 45:828d3b58f2cf
expr: Implement better debugging for refs
author | Lewin Bormann <lbo@spheniscida.de> |
---|---|
date | Thu, 22 Aug 2019 10:49:49 +0200 |
parents | 6183b0c133bf |
children | e753d447a3e6 |
files | src/expr.c src/expr.h |
diffstat | 2 files changed, 22 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/src/expr.c Wed Aug 21 22:43:55 2019 +0200 +++ b/src/expr.c Thu Aug 22 10:49:49 2019 +0200 @@ -20,6 +20,19 @@ return ref; } +ystr_t yref_debug(yref_t* ref) { + if (ref->typ == YREF_ID) { + ystr_t s = ystr_new(NULL); + ystr_build(&s, "id:<%llu>", ref->ref.id); + return s; + } else if (ref->typ == YREF_SYM) { + ystr_t s = ystr_new(NULL); + ystr_build(&s, "id:<\"%s\">", ystr_str(&ref->ref.sym)); + return s; + } + return ystr_new("id:INVALID"); +} + void yref_destroy(yref_t* ref) { if (ref == NULL) return; if (ref->typ == YREF_SYM) ystr_destroy(&ref->ref.sym); @@ -126,6 +139,7 @@ } void yexpr_debug(yexpr_t* expr) { + ystr_t tmp; switch (expr->typ) { case YEXPR_UNDEF: fprintf(stderr, "<undef>"); @@ -140,14 +154,9 @@ fprintf(stderr, "%s", yatom_name(expr->value.atom)); break; case YEXPR_REF: - if (expr->value.ref.typ == YREF_ID) { - fprintf(stderr, "id<%llu>", expr->value.ref.ref.id); - } else if (expr->value.ref.typ == YREF_SYM) { - fprintf(stderr, "id<\"%s\">", - ystr_str(&expr->value.ref.ref.sym)); - } else { - fprintf(stderr, "id<UNINITIALIZED>"); - } + tmp = yref_debug(&expr->value.ref); + fprintf(stderr, "%s", ystr_str(&tmp)); + ystr_destroy(&tmp); break; case YEXPR_LIST: fprintf(stderr, "(");
--- a/src/expr.h Wed Aug 21 22:43:55 2019 +0200 +++ b/src/expr.h Thu Aug 22 10:49:49 2019 +0200 @@ -52,6 +52,11 @@ yref_t yref_new_c(const char* sym); /** + * Create a debug description of ref. + */ +ystr_t yref_debug(yref_t* ref); + +/** * @brief Deallocate memory used by the reference itself. */ void yref_destroy(yref_t* ref);