aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/internals.h10
-rw-r--r--src/zsetup.c10
-rw-r--r--src/zunsetup.c4
3 files changed, 12 insertions, 12 deletions
diff --git a/src/internals.h b/src/internals.h
index 407f4b7..841346f 100644
--- 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
index 66d94ee..3e3062b 100644
--- 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
index 48ee9e3..0af3968 100644
--- 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);