aboutsummaryrefslogtreecommitdiff
path: root/src/parser
diff options
context:
space:
mode:
authorhachem <im@hachem.wtf>2026-09-08 11:26:42 +0200
committerhachem <im@hachem.wtf>2026-09-08 11:26:42 +0200
commit21be45a904a0afc767214298721bd2bbce19a054 (patch)
tree4e97ae690457f82cbedd30bb8f7cf67898e578a5 /src/parser
parent8d73e3f2cdba9ce3591bab5c02e5d90ce62a8de3 (diff)
feat: add signed memory loads
Diffstat (limited to 'src/parser')
-rw-r--r--src/parser/ast.c3
-rw-r--r--src/parser/ast.h9
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;