diff --git a/src/code_generator/symbol_table.c b/src/code_generator/symbol_table.c index eaa3b834..55177f44 100644 --- a/src/code_generator/symbol_table.c +++ b/src/code_generator/symbol_table.c @@ -48,14 +48,20 @@ void symbol_block_dtor(SymbolBlockRef* pself) { safe_free(*pself); } -SymbolTableRef symbol_table_ctor(void) { +SymbolTableRef symbol_table_ctor(StringRef name) { const SymbolTableRef table = safe_malloc(struct SymbolTable); + table->module = LLVMModuleCreateWithName(string_data(name)); + table->builder = LLVMCreateBuilder(); + table->prefix = string_ctor("", NULL); table->stack = VECTORFUNC(SymbolBlockRef, ctor)(NULL); return table; } void symbol_table_dtor(SymbolTableRef* pself) { assert(pself); + LLVMDisposeModule((*pself)->module); + LLVMDisposeBuilder((*pself)->builder); + string_dtor(&(*pself)->prefix); { const VECTORREF(SymbolBlockRef) vector = (*pself)->stack; SymbolBlockRef* iter = VECTORFUNC(SymbolBlockRef, begin)(vector); diff --git a/src/code_generator/symbol_table_impl.h b/src/code_generator/symbol_table_impl.h index 179530d3..c2dfbec7 100644 --- a/src/code_generator/symbol_table_impl.h +++ b/src/code_generator/symbol_table_impl.h @@ -21,6 +21,9 @@ struct SymbolBlock { DECLARE_VECTOR(SymbolBlockRef) struct SymbolTable { + LLVMModuleRef module; + LLVMBuilderRef builder; + StringRef prefix; VECTORREF(SymbolBlockRef) stack; };