diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 69d60d651..d59c3fea9 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -4954,7 +4954,7 @@ Entity **populate_proc_parameter_list(CheckerContext *c, Type *proc_type, isize } else { lhs_count = pt->params->Tuple.variables.count; } - lhs = gb_alloc_array(heap_allocator(), Entity *, lhs_count); + lhs = gb_alloc_array(permanent_allocator(), Entity *, lhs_count); for (isize i = 0; i < lhs_count; i++) { Entity *e = pt->params->Tuple.variables[i]; if (!is_type_polymorphic(e->type)) { diff --git a/src/check_type.cpp b/src/check_type.cpp index ccd426322..b80d6c05e 100644 --- a/src/check_type.cpp +++ b/src/check_type.cpp @@ -2233,8 +2233,8 @@ Type *make_soa_struct_internal(CheckerContext *ctx, Ast *array_typ_expr, Ast *el field_count = 0; soa_struct = alloc_type_struct(); - soa_struct->Struct.fields = slice_make(heap_allocator(), field_count+extra_field_count); - soa_struct->Struct.tags = gb_alloc_array(heap_allocator(), String, field_count+extra_field_count); + soa_struct->Struct.fields = slice_make(permanent_allocator(), field_count+extra_field_count); + soa_struct->Struct.tags = gb_alloc_array(permanent_allocator(), String, field_count+extra_field_count); soa_struct->Struct.node = array_typ_expr; soa_struct->Struct.soa_kind = soa_kind; soa_struct->Struct.soa_elem = elem; @@ -2248,8 +2248,8 @@ Type *make_soa_struct_internal(CheckerContext *ctx, Ast *array_typ_expr, Ast *el field_count = cast(isize)old_array->Array.count; soa_struct = alloc_type_struct(); - soa_struct->Struct.fields = slice_make(heap_allocator(), field_count+extra_field_count); - soa_struct->Struct.tags = gb_alloc_array(heap_allocator(), String, field_count+extra_field_count); + soa_struct->Struct.fields = slice_make(permanent_allocator(), field_count+extra_field_count); + soa_struct->Struct.tags = gb_alloc_array(permanent_allocator(), String, field_count+extra_field_count); soa_struct->Struct.node = array_typ_expr; soa_struct->Struct.soa_kind = soa_kind; soa_struct->Struct.soa_elem = elem; @@ -2293,8 +2293,8 @@ Type *make_soa_struct_internal(CheckerContext *ctx, Ast *array_typ_expr, Ast *el field_count = old_struct->Struct.fields.count; soa_struct = alloc_type_struct(); - soa_struct->Struct.fields = slice_make(heap_allocator(), field_count+extra_field_count); - soa_struct->Struct.tags = gb_alloc_array(heap_allocator(), String, field_count+extra_field_count); + soa_struct->Struct.fields = slice_make(permanent_allocator(), field_count+extra_field_count); + soa_struct->Struct.tags = gb_alloc_array(permanent_allocator(), String, field_count+extra_field_count); soa_struct->Struct.node = array_typ_expr; soa_struct->Struct.soa_kind = soa_kind; soa_struct->Struct.soa_elem = elem; diff --git a/src/exact_value.cpp b/src/exact_value.cpp index d42f5359e..363c6d863 100644 --- a/src/exact_value.cpp +++ b/src/exact_value.cpp @@ -832,7 +832,7 @@ ExactValue exact_binary_operator_value(TokenKind op, ExactValue x, ExactValue y) String sx = x.value_string; String sy = y.value_string; isize len = sx.len+sy.len; - u8 *data = gb_alloc_array(heap_allocator(), u8, len); + u8 *data = gb_alloc_array(permanent_allocator(), u8, len); gb_memmove(data, sx.text, sx.len); gb_memmove(data+sx.len, sy.text, sy.len); return exact_value_string(make_string(data, len)); diff --git a/src/llvm_abi.cpp b/src/llvm_abi.cpp index e9bae42af..83de3dd84 100644 --- a/src/llvm_abi.cpp +++ b/src/llvm_abi.cpp @@ -82,7 +82,7 @@ LLVMTypeRef lb_function_type_to_llvm_ptr(lbFunctionType *ft, bool is_var_arg) { GB_ASSERT_MSG(ret != nullptr, "%d", ft->ret.kind); unsigned maximum_arg_count = offset+arg_count; - LLVMTypeRef *args = gb_alloc_array(heap_allocator(), LLVMTypeRef, maximum_arg_count); + LLVMTypeRef *args = gb_alloc_array(permanent_allocator(), LLVMTypeRef, maximum_arg_count); if (offset == 1) { GB_ASSERT(ft->ret.kind == lbArg_Indirect); args[0] = LLVMPointerType(ft->ret.type, 0); @@ -300,7 +300,7 @@ namespace lbAbi386 { lbArgType compute_return_type(LLVMContextRef c, LLVMTypeRef return_type, bool return_is_defined); LB_ABI_INFO(abi_info) { - lbFunctionType *ft = gb_alloc_item(heap_allocator(), lbFunctionType); + lbFunctionType *ft = gb_alloc_item(permanent_allocator(), lbFunctionType); ft->ctx = c; ft->args = compute_arg_types(c, arg_types, arg_count); ft->ret = compute_return_type(c, return_type, return_is_defined); @@ -378,7 +378,7 @@ namespace lbAbiAmd64Win64 { LB_ABI_INFO(abi_info) { - lbFunctionType *ft = gb_alloc_item(heap_allocator(), lbFunctionType); + lbFunctionType *ft = gb_alloc_item(permanent_allocator(), lbFunctionType); ft->ctx = c; ft->args = compute_arg_types(c, arg_types, arg_count); ft->ret = lbAbi386::compute_return_type(c, return_type, return_is_defined); @@ -469,7 +469,7 @@ namespace lbAbiAmd64SysV { LLVMTypeRef llreg(LLVMContextRef c, Array const ®_classes); LB_ABI_INFO(abi_info) { - lbFunctionType *ft = gb_alloc_item(heap_allocator(), lbFunctionType); + lbFunctionType *ft = gb_alloc_item(permanent_allocator(), lbFunctionType); ft->ctx = c; ft->calling_convention = calling_convention; @@ -849,7 +849,7 @@ namespace lbAbiArm64 { bool is_homogenous_aggregate(LLVMContextRef c, LLVMTypeRef type, LLVMTypeRef *base_type_, unsigned *member_count_); LB_ABI_INFO(abi_info) { - lbFunctionType *ft = gb_alloc_item(heap_allocator(), lbFunctionType); + lbFunctionType *ft = gb_alloc_item(permanent_allocator(), lbFunctionType); ft->ctx = c; ft->ret = compute_return_type(c, return_type, return_is_defined); ft -> args = compute_arg_types(c, arg_types, arg_count); @@ -1034,7 +1034,7 @@ LB_ABI_INFO(lb_get_abi_info) { case ProcCC_None: case ProcCC_InlineAsm: { - lbFunctionType *ft = gb_alloc_item(heap_allocator(), lbFunctionType); + lbFunctionType *ft = gb_alloc_item(permanent_allocator(), lbFunctionType); ft->ctx = c; ft->args = array_make(heap_allocator(), arg_count); for (unsigned i = 0; i < arg_count; i++) { diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index 3e8498776..8ba0a3b87 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -1687,7 +1687,7 @@ void lb_generate_code(lbGenerator *gen) { array_add(&gen->output_object_paths, filepath_obj); array_add(&gen->output_temp_paths, filepath_ll); - auto *wd = gb_alloc_item(heap_allocator(), lbLLVMEmitWorker); + auto *wd = gb_alloc_item(permanent_allocator(), lbLLVMEmitWorker); wd->target_machine = target_machines[j]; wd->code_gen_file_type = code_gen_file_type; wd->filepath_obj = filepath_obj; diff --git a/src/llvm_backend_general.cpp b/src/llvm_backend_general.cpp index f481c122e..85fd9153d 100644 --- a/src/llvm_backend_general.cpp +++ b/src/llvm_backend_general.cpp @@ -1789,7 +1789,7 @@ LLVMTypeRef lb_type_internal(lbModule *m, Type *type) { defer (m->internal_type_level -= 1); LLVMTypeRef ret = nullptr; - LLVMTypeRef *params = gb_alloc_array(heap_allocator(), LLVMTypeRef, param_count); + LLVMTypeRef *params = gb_alloc_array(permanent_allocator(), LLVMTypeRef, param_count); if (type->Proc.result_count != 0) { Type *single_ret = reduce_tuple_to_single_type(type->Proc.results); ret = lb_type(m, single_ret); @@ -1883,7 +1883,7 @@ LLVMTypeRef lb_type_internal(lbModule *m, Type *type) { LLVMTypeRef base_integer = lb_type_internal(m, type->RelativeSlice.base_integer); unsigned field_count = 2; - LLVMTypeRef *fields = gb_alloc_array(heap_allocator(), LLVMTypeRef, field_count); + LLVMTypeRef *fields = gb_alloc_array(permanent_allocator(), LLVMTypeRef, field_count); fields[0] = base_integer; fields[1] = base_integer; return LLVMStructTypeInContext(ctx, fields, field_count, false); diff --git a/src/parser.cpp b/src/parser.cpp index e1f21f459..722df0d90 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -1196,7 +1196,7 @@ CommentGroup *consume_comment_group(AstFile *f, isize n, isize *end_line_) { CommentGroup *comments = nullptr; if (list.count > 0) { - comments = gb_alloc_item(heap_allocator(), CommentGroup); + comments = gb_alloc_item(permanent_allocator(), CommentGroup); comments->list = slice_from_array(list); array_add(&f->comments, comments); } @@ -4727,8 +4727,6 @@ void destroy_ast_file(AstFile *f) { array_free(&f->tokens); array_free(&f->comments); array_free(&f->imports); - gb_free(heap_allocator(), f->tokenizer.fullpath.text); - destroy_tokenizer(&f->tokenizer); } bool init_parser(Parser *p) { @@ -4795,7 +4793,7 @@ WORKER_TASK_PROC(parser_worker_proc) { void parser_add_file_to_process(Parser *p, AstPackage *pkg, FileInfo fi, TokenPos pos) { // TODO(bill): Use a better allocator ImportedFile f = {pkg, fi, pos, p->file_to_process_count++}; - auto wd = gb_alloc_item(heap_allocator(), ParserWorkerData); + auto wd = gb_alloc_item(permanent_allocator(), ParserWorkerData); wd->parser = p; wd->imported_file = f; global_thread_pool_add_task(parser_worker_proc, wd); @@ -4833,7 +4831,7 @@ WORKER_TASK_PROC(foreign_file_worker_proc) { void parser_add_foreign_file_to_process(Parser *p, AstPackage *pkg, AstForeignFileKind kind, FileInfo fi, TokenPos pos) { // TODO(bill): Use a better allocator ImportedFile f = {pkg, fi, pos, p->file_to_process_count++}; - auto wd = gb_alloc_item(heap_allocator(), ForeignFileWorkerData); + auto wd = gb_alloc_item(permanent_allocator(), ForeignFileWorkerData); wd->parser = p; wd->imported_file = f; wd->foreign_kind = kind; @@ -4854,7 +4852,7 @@ AstPackage *try_add_import_path(Parser *p, String const &path, String const &rel string_set_add(&p->imported_files, path); - AstPackage *pkg = gb_alloc_item(heap_allocator(), AstPackage); + AstPackage *pkg = gb_alloc_item(permanent_allocator(), AstPackage); pkg->kind = kind; pkg->fullpath = path; array_init(&pkg->files, heap_allocator()); diff --git a/src/tokenizer.cpp b/src/tokenizer.cpp index 237179ca5..35d6775a3 100644 --- a/src/tokenizer.cpp +++ b/src/tokenizer.cpp @@ -371,7 +371,7 @@ void begin_error_block(void) { void end_error_block(void) { if (global_error_collector.error_buffer.count > 0) { isize n = global_error_collector.error_buffer.count; - u8 *text = gb_alloc_array(heap_allocator(), u8, n+1); + u8 *text = gb_alloc_array(permanent_allocator(), u8, n+1); gb_memmove(text, global_error_collector.error_buffer.data, n); text[n] = 0; String s = {text, n}; @@ -404,7 +404,7 @@ ERROR_OUT_PROC(default_error_out_va) { } else { mutex_lock(&global_error_collector.error_out_mutex); { - u8 *text = gb_alloc_array(heap_allocator(), u8, n+1); + u8 *text = gb_alloc_array(permanent_allocator(), u8, n+1); gb_memmove(text, buf, n); text[n] = 0; array_add(&global_error_collector.errors, make_string(text, n)); @@ -838,12 +838,6 @@ TokenizerInitError init_tokenizer_from_fullpath(Tokenizer *t, String const &full return err; } -gb_inline void destroy_tokenizer(Tokenizer *t) { - if (t->start != nullptr) { - gb_free(heap_allocator(), t->start); - } -} - gb_inline i32 digit_value(Rune r) { switch (r) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':