diff options
| author | hachem <im@hachem.wtf> | 2026-09-08 11:26:42 +0200 |
|---|---|---|
| committer | hachem <im@hachem.wtf> | 2026-09-08 11:26:42 +0200 |
| commit | 21be45a904a0afc767214298721bd2bbce19a054 (patch) | |
| tree | 4e97ae690457f82cbedd30bb8f7cf67898e578a5 /src/parser | |
| parent | 8d73e3f2cdba9ce3591bab5c02e5d90ce62a8de3 (diff) | |
feat: add signed memory loads
Diffstat (limited to 'src/parser')
| -rw-r--r-- | src/parser/ast.c | 3 | ||||
| -rw-r--r-- | src/parser/ast.h | 9 |
2 files changed, 12 insertions, 0 deletions
diff --git a/src/parser/ast.c b/src/parser/ast.c index 9c78d1f..63d8a08 100644 --- a/src/parser/ast.c +++ b/src/parser/ast.c @@ -11,6 +11,9 @@ void free_expr(struct Expr* expr) { case EXPR_PRIMARY: break; + case EXPR_UNARY: + free_expr(expr->unary.operand); + break; case EXPR_BINARY: free_expr(expr->binary.left); free_expr(expr->binary.right); diff --git a/src/parser/ast.h b/src/parser/ast.h index 75d0bdd..288bddf 100644 --- a/src/parser/ast.h +++ b/src/parser/ast.h @@ -58,6 +58,7 @@ struct Param enum ExprKind { EXPR_PRIMARY, + EXPR_UNARY, EXPR_BINARY, EXPR_MEMBER, EXPR_DEREF, @@ -68,6 +69,12 @@ struct PrimaryExpr struct Token token; }; +struct UnaryExpr +{ + struct Token op; + struct Expr* operand; +}; + struct BinaryExpr { struct Expr* left; @@ -83,6 +90,7 @@ struct MemberExpr struct DerefExpr { + bool is_signed; enum StoreSize size; struct Expr* address; }; @@ -93,6 +101,7 @@ struct Expr union { struct PrimaryExpr primary; + struct UnaryExpr unary; struct BinaryExpr binary; struct MemberExpr member; struct DerefExpr deref; |
