From 21be45a904a0afc767214298721bd2bbce19a054 Mon Sep 17 00:00:00 2001 From: hachem Date: Tue, 8 Sep 2026 11:26:42 +0200 Subject: feat: add signed memory loads --- src/parser/ast.c | 3 +++ src/parser/ast.h | 9 +++++++++ 2 files changed, 12 insertions(+) (limited to 'src/parser') 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; -- cgit v1.3