aboutsummaryrefslogtreecommitdiff
path: root/structs.c
diff options
context:
space:
mode:
authorBruce Hill <bruce@bruce-hill.com>2024-09-12 04:09:52 -0400
committerBruce Hill <bruce@bruce-hill.com>2024-09-12 04:09:52 -0400
commit43f4f3610e5258afbfb9e313c989e1e52f477c38 (patch)
tree1f960cd930ed7e1e251ed24700c613a01221443b /structs.c
parentfb6dc0a8b9b5537ef708778bf013f71f98fad41f (diff)
For single-member structs/enums, don't print the member name
Diffstat (limited to 'structs.c')
-rw-r--r--structs.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/structs.c b/structs.c
index cc3de838..7aa2ddf9 100644
--- a/structs.c
+++ b/structs.c
@@ -23,6 +23,11 @@ static CORD compile_str_method(env_t *env, ast_t *ast)
if (def->secret) {
CORD_appendf(&str_func, "\treturn use_color ? Text(\"\\x1b[0;1m%s\\x1b[m(\\x1b[2m...\\x1b[m)\") : Text(\"%s(...)\");\n}",
name, name);
+ } else if (def->fields && !def->fields->next) { // Single-member structs don't need to print names:
+ type_t *field_type = get_arg_ast_type(env, def->fields);
+ CORD field_str = expr_as_text(env, CORD_cat("obj->$", def->fields->name), field_type, "use_color");
+ str_func = CORD_all(str_func, "\treturn Text$concat(use_color ? Text(\"\\x1b[0;1m", name, "\\x1b[m(\") : Text(\"", name, "(\"), ",
+ field_str, ", Text(\")\"));\n}\n");
} else {
CORD_appendf(&str_func, "\treturn Text$concat(use_color ? Text(\"\\x1b[0;1m%s\\x1b[m(\") : Text(\"%s(\")", name, name);
for (arg_ast_t *field = def->fields; field; field = field->next) {