diff options
-rwxr-xr-x | main.py | 8 | ||||
-rw-r--r-- | test/autowasm.c | 2 | ||||
-rw-r--r-- | text.py | 20 |
3 files changed, 15 insertions, 15 deletions
@@ -537,7 +537,7 @@ class CodeGen(object): count_void = 0 #void_source.write("}\n") void_source.write(self.argparser.args.name + "_lib_ret_t* read_aggr_"+self.argparser.args.name+"(int _fd) {\n") - void_source.write(self.argparser.args.name + "_lib_ret_t* lib_ret = malloc(sizeof("+self.argparser.args.name+"_lib_ret_t"+"));\n") + void_source.write("register " + self.argparser.args.name + "_lib_ret_t* lib_ret = malloc(sizeof("+self.argparser.args.name+"_lib_ret_t"+"));\n") void_source.write("lib_ret->obj = malloc(sizeof("+self.argparser.args.name+"_obj_t"+"));\n") void_source.write("lib_ret->current_void_size = malloc(sizeof(uint64_t*));\n") void_source.write("lib_ret->current_void_count = malloc(sizeof(uint64_t*));\n") @@ -571,7 +571,7 @@ class CodeGen(object): agg_source.write(text.c_read_gen.replace("XXX", sign_name).replace("YYY", sign_type)) agg_source.write("lseek(_fd, -sizeof(" + sign_type + "), SEEK_CUR);\n") agg_source.write("if (" + sign_name + "==" + child.text + "){\n") - agg_source.write("lib_ret->obj->"+elem.attrib["name"] + "_container = " + "ft_read_" + elem.attrib["name"] + "(_fd, lib_ret->obj->" + elem.attrib["name"] + "_container, " + "lib_ret->void_train);\n") + agg_source.write("lib_ret->obj->"+elem.attrib["name"] + "_container = " + "ft_read_" + elem.attrib["name"] + "(_fd, lib_ret->obj->" + elem.attrib["name"] + "_container, " + "lib_ret->void_train, lib_ret->current_void_size, lib_ret->current_void_count);\n") if "unordered" in elem.attrib: agg_source.write("}\n") if "unorderedend" in elem.attrib: @@ -583,8 +583,8 @@ class CodeGen(object): def gen_release(self): agg_source = open(self.aggregate_source, "a") agg_source_h = open(self.aggregate_source_h, "a") - agg_source_h.write("void release_all(void);\n") - agg_source.write("void release_all(void) {\n") + agg_source_h.write("void release_all(void** void_train, uint64_t current_void_count);\n") + agg_source.write("void release_all(void** void_train, uint64_t current_void_count) {\n") agg_source.write("for (int i=current_void_count-1;i>=0;--i) {\n") agg_source.write("free(void_train[i]);\n}\n") agg_source.write("free(void_train);\n") diff --git a/test/autowasm.c b/test/autowasm.c index 769cc1e..37bbbe5 100644 --- a/test/autowasm.c +++ b/test/autowasm.c @@ -138,6 +138,6 @@ int main (int argc, char** argv) { printf("\n"); } - release_all(); + release_all(lib_ret->void_train, lib_ret->current_void_count); return 0; } @@ -15,10 +15,10 @@ class text(): #c_read_elem_sig = "void ft_read_YYY(int _fd, XXX* dummyZZZ) {\n" #c_read_elem_sig = "void ft_read_YYY(int _fd, XXX* dummy) {\n" #c_read_elem_sig_h = "void ft_read_YYY(int _fd, XXX* dummy);\n" - c_read_elem_sig = "void* ft_read_YYY(int _fd, XXX* dummy, void** void_train) {\n" - c_read_elem_sig_h = "void* ft_read_YYY(int _fd, XXX* dummy, void** void_train);\n" + c_read_elem_sig = "void* ft_read_YYY(int _fd, XXX* dummy, void** void_train, uint64_t* current_void_size, uint64_t* current_void_count) {\n" + c_read_elem_sig_h = "void* ft_read_YYY(int _fd, XXX* dummy, void** void_train, uint64_t* current_void_size, uint64_t* current_void_count);\n" c_read_elem_sig_1 = "ft_read_XXX(_fd)" - c_read_elem_sig_2 = "ft_read_XXX(_fd, YYY, ZZZ)" + c_read_elem_sig_2 = "ft_read_XXX(_fd, YYY, ZZZ, current_void_size, current_void_count)" c_open_file = "int ft_read_file = open(_ft_file_path, RDONLY);\n" c_function_close = "}\n" c_function_dummy_dec = "XXX dummy;\n" @@ -83,28 +83,28 @@ int32_t read_until_delimiter(int _fd, uint8_t delimiter) { }""" c_void_manager = """ -void void_manager(void* ptr, void** void_train) { +void void_manager(void* ptr, void** void_train, uint64_t* current_void_size, uint64_t* current_void_count) { if (current_void_size == 0) { void_train = malloc(100*sizeof(void*)); current_void_size = 100; } if (current_void_count == current_void_size) { - current_void_size*=2; - void_train = realloc(void_train, current_void_size*sizeof(void*)); + *current_void_size*=2; + void_train = realloc(void_train, *current_void_size*sizeof(void*)); if (void_train == NULL) { printf("void train couldnt allocate more memory.\\n"); } } - void_train[current_void_count] = ptr; - current_void_count++; + void_train[*current_void_count] = ptr; + *current_void_count++; }""" c_read_leb_128_s_sig = "int64_t read_leb_128_s(int _fd, int max_size);\n" c_read_leb_128_u_sig = "uint64_t read_leb_128_u(int _fd, int max_size);\n" c_read_until_delimiter_sig = "int32_t read_until_delimiter(int _fd, uint8_t delimiter);\n" c_read_until_delimiter_proto = "read_until_delimiter(_fd, XXX)" - c_void_manager_sig = "void void_manager(void* ptr, void** void_train);" - c_void_manager_proto = "void_manager(XXX, void_train);" + c_void_manager_sig = "void void_manager(void* ptr, void** void_train, uint64_t* current_void_size, uint64_t* current_void_count);" + c_void_manager_proto = "void_manager(XXX, void_train, current_void_size, current_void_count);" c_read_leb_macro_defs = """ #define READ_VAR_UINT_1(FD) read_leb128_u(FD, 1) |