From 14d8b534ef2fc2dd011c9bd6af29929ccd4f2102 Mon Sep 17 00:00:00 2001 From: Bruce Hill Date: Mon, 7 Apr 2025 15:06:27 -0400 Subject: get_or_setdefault needs to check data_refcount --- src/stdlib/tables.h | 1 + 1 file changed, 1 insertion(+) (limited to 'src') diff --git a/src/stdlib/tables.h b/src/stdlib/tables.h index 35673eaf..1557e429 100644 --- a/src/stdlib/tables.h +++ b/src/stdlib/tables.h @@ -37,6 +37,7 @@ void *Table$get(Table_t t, const void *key, const TypeInfo_t *type); nonnull_var ? nonnull_expr : null_expr; }) #define Table$get_or_setdefault(table_expr, key_t, val_t, key_expr, default_expr, info_expr) ({ \ Table_t *t = table_expr; const key_t k = key_expr; \ + if (t->entries.data_refcount > 0) List$compact(&t->entries, sizeof(struct {key_t k; val_t v;})); \ val_t *v = Table$get(*t, &k, info_expr); \ v ? v : (val_t*)Table$reserve(t, &k, (val_t[1]){default_expr}, info_expr); }) #define Table$get_or_default(table_expr, key_t, val_t, key_expr, default_expr, info_expr) ({ \ -- cgit v1.2.3