#ifndef UNDAR_IR_ASSEMBLER_H #define UNDAR_IR_ASSEMBLER_H #include "../../vm/libc.h" #include "lexer.h" typedef enum { GLOBAL, LOCAL, VAR } ScopeType; typedef enum { VOID, BOOL, I8, I16, I32, U8, U16, U32, F8, F16, F32, STR, PLEX, ARRAY, FUNCTION } SymbolType; typedef struct symbol_s Symbol; typedef struct symbol_tab_s SymbolTable; typedef struct scope_tab_s ScopeTable; #define MAX_SYMBOL_NAME_LENGTH 64 struct symbol_s { char name[MAX_SYMBOL_NAME_LENGTH]; u8 name_length; SymbolType type; ScopeType scope; u32 ref; // vm->mp if global, vm->pc local, register if var u32 size; // size of symbol }; struct symbol_tab_s { Symbol symbols[256]; u8 count; i32 parent; }; struct scope_tab_s { SymbolTable *scopes; u32 count; u32 capacity; i32 scope_ref; }; void assemble(char *source, ScopeTable *st); #endif