aboutsummaryrefslogtreecommitdiff
path: root/src/compile/tables.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/compile/tables.c')
-rw-r--r--src/compile/tables.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/src/compile/tables.c b/src/compile/tables.c
index 2b6d3538..958e5af5 100644
--- a/src/compile/tables.c
+++ b/src/compile/tables.c
@@ -10,8 +10,10 @@
static ast_t *add_to_table_comprehension(ast_t *entry, ast_t *subject) {
DeclareMatch(e, entry, TableEntry);
- return WrapAST(entry, MethodCall, .name = "set", .self = subject,
- .args = new (arg_ast_t, .value = e->key, .next = new (arg_ast_t, .value = e->value)));
+ return WrapAST(
+ entry, MethodCall, .name = "set", .self = subject,
+ .args = new (arg_ast_t, .value = e->key,
+ .next = new (arg_ast_t, .value = e->value ? e->value : WrapAST(entry, Var, .name = "EMPTY"))));
}
Text_t compile_typed_table(env_t *env, ast_t *ast, type_t *table_type) {
@@ -47,8 +49,10 @@ Text_t compile_typed_table(env_t *env, ast_t *ast, type_t *table_type) {
for (ast_list_t *entry = table->entries; entry; entry = entry->next) {
DeclareMatch(e, entry->ast, TableEntry);
- code = Texts(code, ",\n\t{", compile_to_type(key_scope, e->key, key_t), ", ",
- compile_to_type(value_scope, e->value, value_t), "}");
+ code = Texts(
+ code, ",\n\t{", compile_to_type(key_scope, e->key, key_t), ", ",
+ compile_to_type(value_scope, e->value ? e->value : WrapAST(entry->ast, Var, .name = "EMPTY"), value_t),
+ "}");
}
return Texts(code, ")");
}