diff options
| author | Bruce Hill <bruce@bruce-hill.com> | 2024-04-16 13:50:07 -0400 |
|---|---|---|
| committer | Bruce Hill <bruce@bruce-hill.com> | 2024-04-16 13:50:07 -0400 |
| commit | 369c601a560f9c081e2bc04e4f4fe5a8b7b1a6a0 (patch) | |
| tree | aeaa5f7a1af83e25de99187f6e4c31e0609de65b /builtins/table.h | |
| parent | 98b93bb15922974feb06103bea06ec305e17b2ce (diff) | |
Invert escaping so user symbols get prepended with "$" and builtin
symbols don't
Diffstat (limited to 'builtins/table.h')
| -rw-r--r-- | builtins/table.h | 36 |
1 files changed, 18 insertions, 18 deletions
diff --git a/builtins/table.h b/builtins/table.h index fdde32ae..0d7af587 100644 --- a/builtins/table.h +++ b/builtins/table.h @@ -10,22 +10,22 @@ #include "datatypes.h" #include "array.h" -#define $Table(key_t, val_t, key_info, value_info, fb, def, N, ...) ({ \ - struct { key_t k; val_t v; } $ents[N] = {__VA_ARGS__}; \ - table_t $table = Table$from_entries((array_t){ \ - .data=memcpy(GC_MALLOC(sizeof($ents)), $ents, sizeof($ents)), \ - .length=sizeof($ents)/sizeof($ents[0]), \ - .stride=(void*)&$ents[1] - (void*)&$ents[0], \ +#define Table(key_t, val_t, key_info, value_info, fb, def, N, ...) ({ \ + struct { key_t k; val_t v; } ents[N] = {__VA_ARGS__}; \ + table_t table = Table$from_entries((array_t){ \ + .data=memcpy(GC_MALLOC(sizeof(ents)), ents, sizeof(ents)), \ + .length=sizeof(ents)/sizeof(ents[0]), \ + .stride=(void*)&ents[1] - (void*)&ents[0], \ }, $TableInfo(key_info, value_info)); \ - $table.fallback = fb; \ - $table.default_value = def; \ - $table; }) -#define $Table_get(table_expr, key_t, val_t, key_expr, info_expr, filename, start, end) ({ \ - const table_t $t = table_expr; key_t $k = key_expr; const TypeInfo* $info = info_expr; \ - const val_t *$v = Table$get($t, &$k, $info); \ - if (__builtin_expect($v == NULL, 0)) \ - fail_source(filename, start, end, "The key %r is not in this table\n", generic_as_text(&$k, USE_COLOR, $info->TableInfo.key)); \ - *$v; }) + table.fallback = fb; \ + table.default_value = def; \ + table; }) +#define Table_get(table_expr, key_t, val_t, key_expr, info_expr, filename, start, end) ({ \ + const table_t t = table_expr; key_t k = key_expr; const TypeInfo* info = info_expr; \ + const val_t *v = Table$get(t, &k, info); \ + if (__builtin_expect(v == NULL, 0)) \ + fail_source(filename, start, end, "The key %r is not in this table\n", generic_as_text(&k, USE_COLOR, info->TableInfo.key)); \ + *v; }) table_t Table$from_entries(array_t entries, const TypeInfo *type); void *Table$get(table_t t, const void *key, const TypeInfo *type); @@ -33,9 +33,9 @@ void *Table$get_raw(table_t t, const void *key, const TypeInfo *type); void *Table$entry(table_t t, int64_t n); void *Table$reserve(table_t *t, const void *key, const void *value, const TypeInfo *type); void Table$set(table_t *t, const void *key, const void *value, const TypeInfo *type); -#define Table$set_value(t, key_expr, value_expr, type) ({ __typeof(key_expr) $k = key_expr; __typeof(value_expr) $v = value_expr; \ - Table$set(t, &$k, &$v, type); }) -#define Table$reserve_value(t, key_expr, type) ({ __typeof(key_expr) $k = key_expr; Table$reserve(t, &$k, NULL, type); }) +#define Table$set_value(t, key_expr, value_expr, type) ({ __typeof(key_expr) k = key_expr; __typeof(value_expr) v = value_expr; \ + Table$set(t, &k, &v, type); }) +#define Table$reserve_value(t, key_expr, type) ({ __typeof(key_expr) k = key_expr; Table$reserve(t, &k, NULL, type); }) void Table$remove(table_t *t, const void *key, const TypeInfo *type); void Table$clear(table_t *t); void Table$mark_copy_on_write(table_t *t); |
