aboutsummaryrefslogtreecommitdiff
path: root/src/parser/ast.h
diff options
context:
space:
mode:
authorhachem <im@hachem.wtf>2026-08-31 19:58:56 +0200
committerhachem <im@hachem.wtf>2026-08-31 19:58:56 +0200
commit5b06b0e4b8effaacd23308d6a6b26c525e7d3af4 (patch)
tree351155777028e604845d3dfec27d3caf3b22257f /src/parser/ast.h
parentcbdb9073480c3e4d8a088b306c23406cf42e25c0 (diff)
feat: add enums and structs
Diffstat (limited to 'src/parser/ast.h')
-rw-r--r--src/parser/ast.h54
1 files changed, 46 insertions, 8 deletions
diff --git a/src/parser/ast.h b/src/parser/ast.h
index 98e8dea..b114fb1 100644
--- a/src/parser/ast.h
+++ b/src/parser/ast.h
@@ -6,6 +6,15 @@
#include "lexer/lexer.h"
+enum StoreSize
+{
+ STORE_SIZE_NONE,
+ STORE_SIZE_BYTE,
+ STORE_SIZE_WORD,
+ STORE_SIZE_DWORD,
+ STORE_SIZE_QWORD,
+};
+
struct ConstDecl
{
struct Token name;
@@ -18,19 +27,32 @@ struct DataDecl
struct Token value;
};
-struct Param
+struct EnumDecl
{
struct Token name;
- struct Token reg;
+ struct Token* members;
+ size_t member_count;
+ size_t member_capacity;
};
-enum StoreSize
+struct StructField
{
- STORE_SIZE_NONE,
- STORE_SIZE_BYTE,
- STORE_SIZE_WORD,
- STORE_SIZE_DWORD,
- STORE_SIZE_QWORD,
+ struct Token name;
+ enum StoreSize size;
+};
+
+struct StructDecl
+{
+ struct Token name;
+ struct StructField* fields;
+ size_t field_count;
+ size_t field_capacity;
+};
+
+struct Param
+{
+ struct Token name;
+ struct Token reg;
};
enum ExprKind
@@ -175,6 +197,14 @@ struct Program
size_t data_count;
size_t data_capacity;
+ struct EnumDecl* enums;
+ size_t enum_count;
+ size_t enum_capacity;
+
+ struct StructDecl* structs;
+ size_t struct_count;
+ size_t struct_capacity;
+
struct ProcDecl* procs;
size_t proc_count;
size_t proc_capacity;
@@ -185,6 +215,14 @@ void free_program(struct Program* program);
void add_const(struct Program* program, struct ConstDecl decl);
void add_data(struct Program* program, struct DataDecl decl);
+struct EnumDecl create_enum(void);
+void add_enum_member(struct EnumDecl* decl, struct Token member);
+void add_enum(struct Program* program, struct EnumDecl decl);
+
+struct StructDecl create_struct(void);
+void add_struct_field(struct StructDecl* decl, struct StructField field);
+void add_struct(struct Program* program, struct StructDecl decl);
+
struct ProcDecl create_proc(void);
void free_proc(struct ProcDecl* proc);
void add_param(struct ProcDecl* proc, struct Param param);