diff options
| author | gingerBill <bill@gingerbill.org> | 2021-09-13 00:58:39 +0100 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2021-09-13 00:58:39 +0100 |
| commit | fb8fa5217d4a5081dacc0a74a786cd2efc964fdb (patch) | |
| tree | 49724edef53493c6630aa8b2ae91ea3ad57621a4 /src/checker.cpp | |
| parent | 6585601765c24523e43ca3a158abc61d373168db (diff) | |
Begin minimize `Type` size by replacing `Array` with `Slice` etc
Diffstat (limited to 'src/checker.cpp')
| -rw-r--r-- | src/checker.cpp | 39 |
1 files changed, 22 insertions, 17 deletions
diff --git a/src/checker.cpp b/src/checker.cpp index 5544ef58e..8d85784fa 100644 --- a/src/checker.cpp +++ b/src/checker.cpp @@ -4865,22 +4865,25 @@ void check_deferred_procedures(Checker *c) { Entity *dst = src->Procedure.deferred_procedure.entity; GB_ASSERT(dst != nullptr); GB_ASSERT(dst->kind == Entity_Procedure); + + char const *attribute = "deferred_none"; + switch (dst_kind) { + case DeferredProcedure_none: + attribute = "deferred_none"; + break; + case DeferredProcedure_in: + attribute = "deferred_in"; + break; + case DeferredProcedure_out: + attribute = "deferred_out"; + break; + case DeferredProcedure_in_out: + attribute = "deferred_in_out"; + break; + } if (is_type_polymorphic(src->type) || is_type_polymorphic(dst->type)) { - switch (dst_kind) { - case DeferredProcedure_none: - error(src->token, "'deferred_none' cannot be used with a polymorphic procedure"); - break; - case DeferredProcedure_in: - error(src->token, "'deferred_in' cannot be used with a polymorphic procedure"); - break; - case DeferredProcedure_out: - error(src->token, "'deferred_out' cannot be used with a polymorphic procedure"); - break; - case DeferredProcedure_in_out: - error(src->token, "'deferred_in_out' cannot be used with a polymorphic procedure"); - break; - } + error(src->token, "'%s' cannot be used with a polymorphic procedure", attribute); continue; } @@ -4974,17 +4977,19 @@ void check_deferred_procedures(Checker *c) { GB_ASSERT(src_results->kind == Type_Tuple); len += src_results->Tuple.variables.count; } - array_init(&sv, heap_allocator(), 0, len); + slice_init(&sv, heap_allocator(), len); + isize offset = 0; if (src_params != nullptr) { for_array(i, src_params->Tuple.variables) { - array_add(&sv, src_params->Tuple.variables[i]); + sv[offset++] = src_params->Tuple.variables[i]; } } if (src_results != nullptr) { for_array(i, src_results->Tuple.variables) { - array_add(&sv, src_results->Tuple.variables[i]); + sv[offset++] = src_results->Tuple.variables[i]; } } + GB_ASSERT(offset == len); if (are_types_identical(tsrc, dst_params)) { |