#ifndef UNDAR_IR_ASSEMBLER_H #define UNDAR_IR_ASSEMBLER_H #include "../../vm/common.h" #include "../../vm/opcodes.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; #define MAX_SYMBOL_NAME_LENGTH 64 struct symbol_s { char name[MAX_SYMBOL_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; u32 count; u32 capacity; }; void assemble(VM *vm, char *source); #endif