From 0f34bd8f534d605d6043387ab0b1fc7f621eb489 Mon Sep 17 00:00:00 2001 From: Bruce Hill Date: Thu, 29 Feb 2024 12:54:29 -0500 Subject: Bump refcounts for .keys/.values --- compile.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/compile.c b/compile.c index 838524e1..536de03e 100644 --- a/compile.c +++ b/compile.c @@ -909,17 +909,19 @@ CORD compile(env_t *env, ast_t *ast) } case TableType: { if (streq(f->field, "keys")) { - return CORD_all("({ table_t $t = ", compile_to_pointer_depth(env, f->fielded, 0, false), ";\n" - "(array_t){.data = $t.entries.data,\n .length=$t.entries.length,\n .stride=$t.entries.stride,\n .data_refcount=3};})"); + return CORD_all("({ table_t *$t = ", compile_to_pointer_depth(env, f->fielded, 1, false), ";\n" + "$t->entries.data_refcount = 3;\n" + "$t->entries; })"); } else if (streq(f->field, "values")) { auto table = Match(value_t, TableType); size_t offset = type_size(table->key_type); size_t align = type_align(table->value_type); if (align > 1 && offset % align > 0) offset += align - (offset % align); - return CORD_all("({ table_t $t = ", compile_to_pointer_depth(env, f->fielded, 0, false), ";\n" - "(array_t){.data = $t.entries.data + ", CORD_asprintf("%zu", offset), - ",\n .length=$t.entries.length,\n .stride=$t.entries.stride,\n .data_refcount=3};})"); + return CORD_all("({ table_t *$t = ", compile_to_pointer_depth(env, f->fielded, 1, false), ";\n" + "$t->entries.data_refcount = 3;\n" + "(array_t){.data = $t->entries.data + ", CORD_asprintf("%zu", offset), + ",\n .length=$t->entries.length,\n .stride=$t->entries.stride,\n .data_refcount=3};})"); } else if (streq(f->field, "fallback")) { return CORD_all("(", compile_to_pointer_depth(env, f->fielded, 0, false), ").fallback"); } else if (streq(f->field, "default")) { -- cgit v1.2.3