aboutsummaryrefslogtreecommitdiff
path: root/src/stdlib/tables.h
diff options
context:
space:
mode:
authorBruce Hill <bruce@bruce-hill.com>2025-04-07 15:06:27 -0400
committerBruce Hill <bruce@bruce-hill.com>2025-04-07 15:06:27 -0400
commit14d8b534ef2fc2dd011c9bd6af29929ccd4f2102 (patch)
treeab250d8dd1929eee17f12c4f2038fd73f87fa1b1 /src/stdlib/tables.h
parent82f5f05bb9440b758ae5e4a7c168e36ecff06db5 (diff)
get_or_setdefault needs to check data_refcount
Diffstat (limited to 'src/stdlib/tables.h')
-rw-r--r--src/stdlib/tables.h1
1 files changed, 1 insertions, 0 deletions
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) ({ \