From 00ea0ba881dc84330d17feb9ca94cc5107a00527 Mon Sep 17 00:00:00 2001 From: hatsusato Date: Fri, 17 Jun 2016 13:58:26 +0900 Subject: [PATCH 1/3] Add module to symbol table --- src/code_generator/symbol_table.c | 4 +++- src/code_generator/symbol_table_impl.h | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/code_generator/symbol_table.c b/src/code_generator/symbol_table.c index eaa3b834..52378a8c 100644 --- a/src/code_generator/symbol_table.c +++ b/src/code_generator/symbol_table.c @@ -48,14 +48,16 @@ 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->stack = VECTORFUNC(SymbolBlockRef, ctor)(NULL); return table; } void symbol_table_dtor(SymbolTableRef* pself) { assert(pself); + LLVMDisposeModule((*pself)->module); { 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..f0142804 100644 --- a/src/code_generator/symbol_table_impl.h +++ b/src/code_generator/symbol_table_impl.h @@ -21,6 +21,7 @@ struct SymbolBlock { DECLARE_VECTOR(SymbolBlockRef) struct SymbolTable { + LLVMModuleRef module; VECTORREF(SymbolBlockRef) stack; }; From a91d06b18a5414db74da1ae76553a93f06ea6334 Mon Sep 17 00:00:00 2001 From: hatsusato Date: Fri, 17 Jun 2016 13:43:07 +0900 Subject: [PATCH 2/3] Add builder to symbol table --- src/code_generator/symbol_table.c | 2 ++ src/code_generator/symbol_table_impl.h | 1 + 2 files changed, 3 insertions(+) diff --git a/src/code_generator/symbol_table.c b/src/code_generator/symbol_table.c index 52378a8c..261a56c3 100644 --- a/src/code_generator/symbol_table.c +++ b/src/code_generator/symbol_table.c @@ -51,6 +51,7 @@ void symbol_block_dtor(SymbolBlockRef* pself) { SymbolTableRef symbol_table_ctor(StringRef name) { const SymbolTableRef table = safe_malloc(struct SymbolTable); table->module = LLVMModuleCreateWithName(string_data(name)); + table->builder = LLVMCreateBuilder(); table->stack = VECTORFUNC(SymbolBlockRef, ctor)(NULL); return table; } @@ -58,6 +59,7 @@ SymbolTableRef symbol_table_ctor(StringRef name) { void symbol_table_dtor(SymbolTableRef* pself) { assert(pself); LLVMDisposeModule((*pself)->module); + LLVMDisposeBuilder((*pself)->builder); { 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 f0142804..0ed9ef0b 100644 --- a/src/code_generator/symbol_table_impl.h +++ b/src/code_generator/symbol_table_impl.h @@ -22,6 +22,7 @@ DECLARE_VECTOR(SymbolBlockRef) struct SymbolTable { LLVMModuleRef module; + LLVMBuilderRef builder; VECTORREF(SymbolBlockRef) stack; }; From 9de10e59be3f774690eb52f2ae1e9865f4ef6e68 Mon Sep 17 00:00:00 2001 From: hatsusato Date: Fri, 17 Jun 2016 23:01:11 +0900 Subject: [PATCH 3/3] Add prefix member to symbol table --- src/code_generator/symbol_table.c | 2 ++ src/code_generator/symbol_table_impl.h | 1 + 2 files changed, 3 insertions(+) diff --git a/src/code_generator/symbol_table.c b/src/code_generator/symbol_table.c index 261a56c3..55177f44 100644 --- a/src/code_generator/symbol_table.c +++ b/src/code_generator/symbol_table.c @@ -52,6 +52,7 @@ 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; } @@ -60,6 +61,7 @@ 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 0ed9ef0b..c2dfbec7 100644 --- a/src/code_generator/symbol_table_impl.h +++ b/src/code_generator/symbol_table_impl.h @@ -23,6 +23,7 @@ DECLARE_VECTOR(SymbolBlockRef) struct SymbolTable { LLVMModuleRef module; LLVMBuilderRef builder; + StringRef prefix; VECTORREF(SymbolBlockRef) stack; };