Begin work on building statements

This commit is contained in:
gingerBill
2023-07-14 13:01:17 +01:00
parent 7cd2d14b64
commit 2a10c8fe5c
3 changed files with 344 additions and 8 deletions
+34
View File
@@ -88,6 +88,29 @@ struct cgAddr {
};
struct cgTargetList {
cgTargetList *prev;
bool is_block;
// control regions
TB_Node * break_;
TB_Node * continue_;
TB_Node * fallthrough_;
};
struct cgBranchBlocks {
Ast * label;
TB_Node *break_;
TB_Node *continue_;
};
enum cgDeferExitKind {
cgDeferExit_Default,
cgDeferExit_Return,
cgDeferExit_Branch,
};
struct cgProcedure {
u32 flags;
u16 state_flags;
@@ -113,6 +136,10 @@ struct cgProcedure {
cgValue value;
Ast *curr_stmt;
cgTargetList * target_list;
Array<cgBranchBlocks> branch_blocks;
};
@@ -129,6 +156,8 @@ struct cgModule {
PtrMap<TB_Function *, Entity *> procedure_values;
Array<cgProcedure *> procedures_to_generate;
PtrMap<uintptr, TB_FileID> file_id_map; // Key: AstFile.id (i32 cast to uintptr)
std::atomic<u32> nested_type_name_guid;
};
@@ -158,3 +187,8 @@ gb_internal cgValue cg_value(TB_Node * node, Type *type);
gb_internal cgAddr cg_addr(cgValue const &value);
gb_internal void cg_build_stmt(cgProcedure *p, Ast *stmt);
gb_internal void cg_build_stmt_list(cgProcedure *p, Slice<Ast *> const &stmts);
gb_internal void cg_build_when_stmt(cgProcedure *p, AstWhenStmt *ws);