aboutsummaryrefslogtreecommitdiff
path: root/builtins
diff options
context:
space:
mode:
authorBruce Hill <bruce@bruce-hill.com>2024-09-12 00:55:43 -0400
committerBruce Hill <bruce@bruce-hill.com>2024-09-12 00:55:43 -0400
commit327d466b9543aee3983277ca4158e5b7aa06fdf8 (patch)
tree64028cc0ca38b76461a85be02e3103db600f0bcc /builtins
parentfa7e52787f81f3673f9d57e9e4ba7fc015ca8432 (diff)
Table:get() now uses optional values instead of default or failure modes
Diffstat (limited to 'builtins')
-rw-r--r--builtins/table.h12
1 files changed, 3 insertions, 9 deletions
diff --git a/builtins/table.h b/builtins/table.h
index 8e6e5de1..e589e6ec 100644
--- a/builtins/table.h
+++ b/builtins/table.h
@@ -31,16 +31,10 @@
Table_t Table$from_entries(Array_t entries, const TypeInfo *type);
void *Table$get(Table_t t, const void *key, const TypeInfo *type);
-#define Table$get_value_or_fail(table_expr, key_t, val_t, key_expr, info_expr, start, end) ({ \
- const Table_t t = table_expr; key_t k = key_expr; const TypeInfo* info = info_expr; \
- val_t *v = Table$get(t, &k, info); \
- if (__builtin_expect(v == NULL, 0)) \
- fail_source(__SOURCE_FILE__, start, end, "The key %k is not in this table\n", (Text_t[1]){generic_as_text(&k, no, info->TableInfo.key)}); \
- *v; })
-#define Table$get_value_or_default(table_expr, key_t, val_t, key_expr, default_val, info_expr) ({ \
+#define Table$get_optional(table_expr, key_t, val_t, key_expr, nonnull_var, nonnull_expr, null_expr, info_expr) ({ \
const Table_t t = table_expr; const key_t k = key_expr; \
- val_t *v = Table$get(t, &k, info_expr); \
- v ? *v : default_val; })
+ val_t *nonnull_var = Table$get(t, &k, info_expr); \
+ nonnull_var ? nonnull_expr : null_expr; })
#define Table$has_value(table_expr, key_expr, info_expr) ({ \
const Table_t t = table_expr; __typeof(key_expr) k = key_expr; \
(Table$get(t, &k, info_expr) != NULL); })