aboutsummaryrefslogtreecommitdiff
path: root/structs.c
diff options
context:
space:
mode:
authorBruce Hill <bruce@bruce-hill.com>2024-05-21 20:14:57 -0400
committerBruce Hill <bruce@bruce-hill.com>2024-05-21 20:14:57 -0400
commitb1db4fd0f68ddbc357df10743b3c85d12af0bc4e (patch)
treeb05d32797ef11e180b9c930fc256955b51446911 /structs.c
parent760f46e71c2a430c5824e79539af4b3537f307f0 (diff)
Improve codegen for enums and structs (change $tag$Foo$Baz to
Foo$tag$Baz)
Diffstat (limited to 'structs.c')
-rw-r--r--structs.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/structs.c b/structs.c
index 730d8aec..d62d2df2 100644
--- a/structs.c
+++ b/structs.c
@@ -118,14 +118,15 @@ void compile_struct_def(env_t *env, ast_t *ast)
CORD_appendf(&env->code->typedefs, "typedef struct %r_s %r_t;\n", full_name, full_name);
CORD_appendf(&env->code->typedefs, "#define %r(...) ((%r_t){__VA_ARGS__})\n", full_name, full_name);
- CORD_appendf(&env->code->typecode, "struct %r_s {\n", full_name);
+ CORD struct_code = CORD_all("struct ", full_name, "_s {\n");
for (arg_ast_t *field = def->fields; field; field = field->next) {
type_t *field_t = get_arg_ast_type(env, field);
CORD type_code = compile_type(env, field_t);
- CORD_appendf(&env->code->typecode, "%r %s%s;\n", type_code, field->name,
+ CORD_appendf(&struct_code, "%r %s%s;\n", type_code, field->name,
CORD_cmp(type_code, "Bool_t") ? "" : ":1");
}
- CORD_appendf(&env->code->typecode, "};\n");
+ struct_code = CORD_all(struct_code, "};\n");
+ env->code->typecode = CORD_all(env->code->typecode, struct_code);
// Typeinfo:
CORD_appendf(&env->code->typedefs, "extern const TypeInfo %r;\n", full_name);