diff options
| author | hachem <im@hachem.wtf> | 2026-08-31 16:56:40 +0200 |
|---|---|---|
| committer | hachem <im@hachem.wtf> | 2026-08-31 16:56:40 +0200 |
| commit | 53aed3fadf1f7ad66dea9a8a0b46bf42eda921be (patch) | |
| tree | ea14a08b29a18072d1e420353a39c1397f85bee2 /src/sema | |
| parent | f8a2d02c75df62f74e5907696d5a99a024d59018 (diff) | |
feat: add memory loads via ^reg
Diffstat (limited to 'src/sema')
| -rw-r--r-- | src/sema/sema.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/sema/sema.c b/src/sema/sema.c index ad2b12a..fb53bbf 100644 --- a/src/sema/sema.c +++ b/src/sema/sema.c @@ -227,6 +227,19 @@ static void check_expr(struct RefCheck* check, struct Expr* expr) check_expr(check, expr->binary.left); check_expr(check, expr->binary.right); break; + case EXPR_DEREF: + { + struct Expr* address = expr->deref.address; + if (address->kind == EXPR_PRIMARY + && (is_register(check, address->primary.token) || is_param(check, address->primary.token))) + break; + + if (address->kind == EXPR_PRIMARY) + ref_error(check, address->primary.token, "dereference address must be a register"); + else + check_expr(check, address); + break; + } case EXPR_MEMBER: { struct Expr* object = expr->member.object; |
