From 45d646be10af585b2d784b7f95f20b18e5cc59d1 Mon Sep 17 00:00:00 2001 From: Bruce Hill Date: Tue, 13 Feb 2024 13:15:28 -0500 Subject: Improvements to cording --- compile.c | 9 +++++++-- metamethods/cord.c | 5 ++--- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/compile.c b/compile.c index 7b9b6698..87a4a764 100644 --- a/compile.c +++ b/compile.c @@ -279,9 +279,14 @@ CORD compile(ast_t *ast) } code = CORD_cat(code, "};\n"); CORD_sprintf(&code, - "%rCORD %s__cord(%s_t *obj, void *userdata) {\n" + "%rCORD %s__cord(%s_t *obj, bool use_color) {\n" "\tif (!obj) return \"%s\";\n" - "\treturn CORD_asprintf(\"%s(", code, def->name, def->name, def->name, def->name); + "\treturn CORD_asprintf(use_color ? \"\\x1b[0;1m%s\\x1b[m(", code, def->name, def->name, def->name, def->name); + for (arg_ast_t *field = def->fields; field; field = field->next) { + CORD_sprintf(&code, "%r%s=\\x1b[35m%%r\\x1b[m", code, field->name); + if (field->next) code = CORD_cat(code, ", "); + } + CORD_appendf(&code, ")\" : \"%s(", def->name); for (arg_ast_t *field = def->fields; field; field = field->next) { CORD_sprintf(&code, "%r%s=%%r", code, field->name); if (field->next) code = CORD_cat(code, ", "); diff --git a/metamethods/cord.c b/metamethods/cord.c index 82e6a6df..4fd00cd3 100644 --- a/metamethods/cord.c +++ b/metamethods/cord.c @@ -6,7 +6,7 @@ #include "../util.h" -typedef CORD (*custom_cord_func)(void *x, void *userdata); +typedef CORD (*custom_cord_func)(void *x, bool use_color); typedef struct { void *data; @@ -84,8 +84,7 @@ static CORD vas_cord(void *x, bool use_color, const char **fmt, va_list args) } case '_': { custom_cord_func fn = va_arg(args, custom_cord_func); - void *arg = va_arg(args, void*); - return fn(x, arg); + return fn(x, use_color); } case ' ': return "?"; default: errx(1, "Unsupported format specifier: '%c'", c); -- cgit v1.2.3