diff options
| author | Josh Jones <contact@joshjones.uk> | 2024-06-14 19:58:13 +0200 |
|---|---|---|
| committer | Josh Jones <contact@joshjones.uk> | 2024-06-14 19:58:13 +0200 |
| commit | 759139089fc38c59882a29bce7dee031fa6385b3 (patch) | |
| tree | 25c49e40fd9246ad5e5ce2393f655112a1d45835 /core/math/big/internal.odin | |
| parent | ff4787070d9673a417f549f1b9452e675c96f992 (diff) | |
Fix big.shrink not actually shrinking
Diffstat (limited to 'core/math/big/internal.odin')
| -rw-r--r-- | core/math/big/internal.odin | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/core/math/big/internal.odin b/core/math/big/internal.odin index fa747e46a..360d063e9 100644 --- a/core/math/big/internal.odin +++ b/core/math/big/internal.odin @@ -2178,15 +2178,20 @@ internal_int_grow :: proc(a: ^Int, digits: int, allow_shrink := false, allocator } /* - If not yet iniialized, initialize the `digit` backing with the allocator we were passed. + If not yet initialized, initialize the `digit` backing with the allocator we were passed. */ if cap == 0 { a.digit = make([dynamic]DIGIT, needed, allocator) - } else if cap != needed { + } else if cap < needed { /* `[dynamic]DIGIT` already knows what allocator was used for it, so resize will do the right thing. */ resize(&a.digit, needed) + } else if cap > needed && allow_shrink { + /* + Same applies to builtin.shrink here as resize above + */ + builtin.shrink(&a.digit, needed) } /* Let's see if the allocation/resize worked as expected. |