aboutsummaryrefslogtreecommitdiff
path: root/compile.c
diff options
context:
space:
mode:
authorBruce Hill <bruce@bruce-hill.com>2024-02-13 20:27:19 -0500
committerBruce Hill <bruce@bruce-hill.com>2024-02-13 20:27:19 -0500
commit853b8e505e007c30fe9ad26ad4f611874f4e7d4f (patch)
treefc48bad52f6a8671789b258e65693beee11d9c20 /compile.c
parentc60b21bf3c5c9341e4ced1d19d3aeed13dcfc778 (diff)
Add secret structs
Diffstat (limited to 'compile.c')
-rw-r--r--compile.c40
1 files changed, 24 insertions, 16 deletions
diff --git a/compile.c b/compile.c
index 554a8556..3b71d6f2 100644
--- a/compile.c
+++ b/compile.c
@@ -289,23 +289,31 @@ CORD compile(env_t *env, ast_t *ast)
}
CORD_appendf(&env->types, "};\n");
- CORD_appendf(&env->funcs,
- "CORD %s__cord(%s_t *obj, bool use_color) {\n"
- "\tif (!obj) return \"%s\";\n"
- "\treturn CORD_asprintf(use_color ? \"\\x1b[0;1m%s\\x1b[m(", def->name, def->name, def->name, def->name);
- for (arg_ast_t *field = def->fields; field; field = field->next) {
- CORD_appendf(&env->funcs, "%s=\\x1b[35m%%r\\x1b[m", field->name);
- if (field->next) env->funcs = CORD_cat(env->funcs, ", ");
- }
- CORD_appendf(&env->funcs, ")\" : \"%s(", def->name);
- for (arg_ast_t *field = def->fields; field; field = field->next) {
- CORD_appendf(&env->funcs, "%s=%%r", field->name);
- if (field->next) env->funcs = CORD_cat(env->funcs, ", ");
+ CORD cord_func = CORD_asprintf("CORD %s__cord(%s_t *obj, bool use_color) {\n"
+ "\tif (!obj) return \"%s\";\n", def->name, def->name, def->name);
+
+ if (def->secret) {
+ CORD_appendf(&cord_func, "\treturn use_color ? \"\\x1b[0;1m%s\\x1b[m(\\x1b[2m...\\x1b[m)\" : \"%s(...)\";\n}",
+ def->name, def->name);
+ } else {
+ CORD_appendf(&cord_func, "\treturn CORD_asprintf(use_color ? \"\\x1b[0;1m%s\\x1b[m(", def->name);
+ for (arg_ast_t *field = def->fields; field; field = field->next) {
+ CORD_appendf(&cord_func, "%s=\\x1b[35m%%r\\x1b[m", field->name);
+ if (field->next) cord_func = CORD_cat(cord_func, ", ");
+ }
+ CORD_appendf(&cord_func, ")\" : \"%s(", def->name);
+ for (arg_ast_t *field = def->fields; field; field = field->next) {
+ CORD_appendf(&cord_func, "%s=%%r", field->name);
+ if (field->next) cord_func = CORD_cat(cord_func, ", ");
+ }
+ cord_func = CORD_cat(cord_func, ")\"");
+ for (arg_ast_t *field = def->fields; field; field = field->next)
+ CORD_appendf(&cord_func, ", __cord(obj->%s)", field->name);
+ cord_func = CORD_cat(cord_func, ");\n}");
}
- env->funcs = CORD_cat(env->funcs, ")\"");
- for (arg_ast_t *field = def->fields; field; field = field->next)
- CORD_appendf(&env->funcs, ", __cord(obj->%s)", field->name);
- env->funcs = CORD_cat(env->funcs, ");\n}");
+
+ env->funcs = CORD_cat(env->funcs, cord_func);
+
return CORD_EMPTY;
}
case EnumDef: {