libzahl

big integer library
git clone git://git.suckless.org/libzahl
Log | Files | Refs | README | LICENSE

commit 5532b46827067fdfe3dfe35f114c57084c6f5717
parent 52e017b923f37eb749a619329b3ac2874d53245e
Author: Mattias Andrée <maandree@kth.se>
Date:   Sun,  1 May 2016 10:33:53 +0200

Constants do not need dynamic memory

Signed-off-by: Mattias Andrée <maandree@kth.se>

Diffstat:
Msrc/internals.h | 10+++++-----
Msrc/zsetup.c | 10+++++++---
Msrc/zunsetup.c | 4----
3 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/src/internals.h b/src/internals.h @@ -51,15 +51,15 @@ X(libzahl_tmp_ptest_n4, 0) #define LIST_CONSTS\ - X(libzahl_const_1e19, zsetu, 10000000000000000000ULL) /* The largest power of 10 < 2⁶⁴. */\ - X(libzahl_const_1, zsetu, 1)\ - X(libzahl_const_2, zsetu, 2)\ - X(libzahl_const_4, zsetu, 4) + X(0, libzahl_const_1e19, zsetu, 10000000000000000000ULL) /* The largest power of 10 < 2⁶⁴. */\ + X(1, libzahl_const_1, zsetu, 1)\ + X(2, libzahl_const_2, zsetu, 2)\ + X(3, libzahl_const_4, zsetu, 4) #define X(x, s) extern z_t x; LIST_TEMPS #undef X -#define X(x, f, v) extern z_t x; +#define X(i, x, f, v) extern z_t x; LIST_CONSTS #undef X diff --git a/src/zsetup.c b/src/zsetup.c @@ -4,7 +4,7 @@ #define X(x, s) z_t x; LIST_TEMPS #undef X -#define X(x, f, v) z_t x; +#define X(i, x, f, v) z_t x; LIST_CONSTS #undef X @@ -20,6 +20,10 @@ struct zahl **libzahl_temp_stack_head; struct zahl **libzahl_temp_stack_end; void *libzahl_temp_allocation = 0; +#define X(i, x, f, v) 1 + +static zahl_char_t constant_chars[LIST_CONSTS 0]; +#undef X + void zsetup(jmp_buf env) @@ -38,8 +42,8 @@ zsetup(jmp_buf env) zinit(x); if (s) zsetu(x, 1); LIST_TEMPS; #undef X -#define X(x, f, v)\ - zinit(x), f(x, v); +#define X(i, x, f, v)\ + (x)->alloced = 1, (x)->chars = constant_chars + (i), f(x, v); LIST_CONSTS; #undef X for (i = BITS_PER_CHAR; i--;) diff --git a/src/zunsetup.c b/src/zunsetup.c @@ -12,10 +12,6 @@ zunsetup(void) free(x->chars); LIST_TEMPS; #undef X -#define X(x, f, v)\ - free(x->chars); - LIST_CONSTS; -#undef X for (i = BITS_PER_CHAR; i--;) free(libzahl_tmp_divmod_ds[i]->chars);