diff options
| author | Bruce Hill <bruce@bruce-hill.com> | 2024-05-21 20:54:09 -0400 |
|---|---|---|
| committer | Bruce Hill <bruce@bruce-hill.com> | 2024-05-21 20:54:09 -0400 |
| commit | 7e275af628ea2217b78c5c0cf12864728a6fc2b4 (patch) | |
| tree | 4cea62a9ccf1ed5dff6191679943c2763d44a16d | |
| parent | b1db4fd0f68ddbc357df10743b3c85d12af0bc4e (diff) | |
Get rid of struct constructor
| -rw-r--r-- | compile.c | 3 | ||||
| -rw-r--r-- | structs.c | 1 |
2 files changed, 1 insertions, 3 deletions
@@ -1704,8 +1704,7 @@ CORD compile(env_t *env, ast_t *ast) if (t->tag == StructType) { // Struct constructor: fn_t = Type(FunctionType, .args=Match(t, StructType)->fields, .ret=t); - CORD fn = compile(env, call->fn); - return CORD_all(fn, "(", compile_arguments(env, ast, Match(fn_t, FunctionType)->args, call->args), ")"); + return CORD_all("((", compile_type(env, t), "){", compile_arguments(env, ast, Match(fn_t, FunctionType)->args, call->args), "})"); } else if (t->tag == IntType || t->tag == NumType) { // Int/Num constructor: if (!call->args || call->args->next) @@ -116,7 +116,6 @@ void compile_struct_def(env_t *env, ast_t *ast) auto def = Match(ast, StructDef); CORD full_name = CORD_cat(env->file_prefix, def->name); 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 struct_code = CORD_all("struct ", full_name, "_s {\n"); for (arg_ast_t *field = def->fields; field; field = field->next) { |
