diff options
Diffstat (limited to 'compiler/codegen.cup')
| -rw-r--r-- | compiler/codegen.cup | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/compiler/codegen.cup b/compiler/codegen.cup index 68c3321..d0cf8ab 100644 --- a/compiler/codegen.cup +++ b/compiler/codegen.cup @@ -52,6 +52,8 @@ fn generate_lvalue_into_rax(node: Node*) { let offset = node.d.variable.offset; emit_asm(" mov rax, global_vars\n"); emit_asm(" add rax, "); emit_num(offset); emit_asm("\n"); + } else if (node.typ == AST_DEREF) { + generate_expr_into_rax(node.d.unary); } else { die2("Unsupported type in generate_lvalue_into_rax: ", node_type_to_string(node.typ)); } @@ -78,6 +80,9 @@ fn generate_expr_into_rax(node: Node*) { } else { die("Unsupported literal type in generate_expr_into_rax"); } + } else if (node.typ == AST_ADDROF) { + generate_lvalue_into_rax(node.d.unary); + } else if (node.typ == AST_CONDITIONAL) { let label = ++gen_label_counter; generate_expr_into_rax(node.d.conditional.cond); |