aboutsummaryrefslogtreecommitdiff
path: root/compile.c
diff options
context:
space:
mode:
authorBruce Hill <bruce@bruce-hill.com>2024-08-03 16:39:04 -0400
committerBruce Hill <bruce@bruce-hill.com>2024-08-03 16:39:04 -0400
commit99b00530ceaf787a936cd37894e2dbf5b6e612ce (patch)
treea99b5681b6048090b42c6ea4e4d2934915ff2b52 /compile.c
parent17be975d3afbff837ea621470f8a093c0090c5c8 (diff)
Change structs/enums so they allow for field/tag names that are C
keywords
Diffstat (limited to 'compile.c')
-rw-r--r--compile.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/compile.c b/compile.c
index a9e55b9e..0f8c792e 100644
--- a/compile.c
+++ b/compile.c
@@ -246,7 +246,7 @@ CORD compile_statement(env_t *env, ast_t *ast)
auto tag_struct = Match(tag_type, StructType);
if (clause->args && !clause->args->next && tag_struct->fields && tag_struct->fields->next) {
- code = CORD_all(code, compile_type(tag_type), " ", compile(env, clause->args->ast), " = subject.", clause_tag_name, ";\n");
+ code = CORD_all(code, compile_type(tag_type), " ", compile(env, clause->args->ast), " = subject.$", clause_tag_name, ";\n");
scope = fresh_scope(scope);
set_binding(scope, Match(clause->args->ast, Var)->name, new(binding_t, .type=tag_type));
} else if (clause->args) {
@@ -258,7 +258,7 @@ CORD compile_statement(env_t *env, ast_t *ast)
code_err(clause->tag_name, "The field %T.%s.%s wasn't accounted for", subject_t, clause_tag_name, field->name);
if (!field)
code_err(var->ast, "This is one more field than %T has", subject_t);
- code = CORD_all(code, compile_type(field->type), " ", compile(env, var->ast), " = subject.", clause_tag_name, ".", field->name, ";\n");
+ code = CORD_all(code, compile_type(field->type), " ", compile(env, var->ast), " = subject.$", clause_tag_name, ".$", field->name, ";\n");
set_binding(scope, Match(var->ast, Var)->name, new(binding_t, .type=field->type));
var = var->next;
field = field->next;
@@ -2112,10 +2112,10 @@ CORD compile(env_t *env, ast_t *ast)
if (streq(field->name, f->field)) {
if (fielded_t->tag == PointerType) {
CORD fielded = compile_to_pointer_depth(env, f->fielded, 1, false);
- return CORD_asprintf("(%r)->%s", fielded, f->field);
+ return CORD_asprintf("(%r)->$%s", fielded, f->field);
} else {
CORD fielded = compile(env, f->fielded);
- return CORD_asprintf("(%r).%s", fielded, f->field);
+ return CORD_asprintf("(%r).$%s", fielded, f->field);
}
}
}