aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--compile.c9
-rw-r--r--metamethods/cord.c5
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);