aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGavin Howard <yzena.tech@gmail.com>2019-11-30 16:01:24 -0700
committerGavin Howard <yzena.tech@gmail.com>2019-11-30 16:01:24 -0700
commitd00e69c2c40868ebcf6c4ddbb4e84cd505273c2e (patch)
treee3eeb39a751b3d574174c5449346fe66665f32b3
parentcd2a5b49e62d83683caaa2ba5f9f5c2cf4811527 (diff)
downloadbc-d00e69c2c40868ebcf6c4ddbb4e84cd505273c2e.tar.gz
Make each calculator only set up what it has to
-rw-r--r--src/lang.c26
-rw-r--r--src/parse.c39
-rw-r--r--src/program.c18
3 files changed, 50 insertions, 33 deletions
diff --git a/src/lang.c b/src/lang.c
index 9e8947f3..625cf48d 100644
--- a/src/lang.c
+++ b/src/lang.c
@@ -97,10 +97,12 @@ void bc_func_init(BcFunc *f, const char *name) {
bc_vec_init(&f->strs, sizeof(char*), bc_string_free);
bc_vec_init(&f->consts, sizeof(BcConst), bc_const_free);
#if BC_ENABLED
- bc_vec_init(&f->autos, sizeof(BcLoc), NULL);
- bc_vec_init(&f->labels, sizeof(size_t), NULL);
- f->nparams = 0;
- f->voidfn = false;
+ if (BC_IS_BC) {
+ bc_vec_init(&f->autos, sizeof(BcLoc), NULL);
+ bc_vec_init(&f->labels, sizeof(size_t), NULL);
+ f->nparams = 0;
+ f->voidfn = false;
+ }
#endif // BC_ENABLED
f->name = name;
}
@@ -111,10 +113,12 @@ void bc_func_reset(BcFunc *f) {
bc_vec_npop(&f->strs, f->strs.len);
bc_vec_npop(&f->consts, f->consts.len);
#if BC_ENABLED
- bc_vec_npop(&f->autos, f->autos.len);
- bc_vec_npop(&f->labels, f->labels.len);
- f->nparams = 0;
- f->voidfn = false;
+ if (BC_IS_BC) {
+ bc_vec_npop(&f->autos, f->autos.len);
+ bc_vec_npop(&f->labels, f->labels.len);
+ f->nparams = 0;
+ f->voidfn = false;
+ }
#endif // BC_ENABLED
}
@@ -125,8 +129,10 @@ void bc_func_free(void *func) {
bc_vec_free(&f->strs);
bc_vec_free(&f->consts);
#if BC_ENABLED
- bc_vec_free(&f->autos);
- bc_vec_free(&f->labels);
+ if (BC_IS_BC) {
+ bc_vec_free(&f->autos);
+ bc_vec_free(&f->labels);
+ }
#endif // BC_ENABLED
}
diff --git a/src/parse.c b/src/parse.c
index fc04608b..2bff1e42 100644
--- a/src/parse.c
+++ b/src/parse.c
@@ -136,24 +136,31 @@ BcStatus bc_parse_reset(BcParse *p, BcStatus s) {
p->auto_part = false;
#if BC_ENABLED
- bc_vec_npop(&p->flags, p->flags.len - 1);
- bc_vec_npop(&p->exits, p->exits.len);
- bc_vec_npop(&p->conds, p->conds.len);
- bc_vec_npop(&p->ops, p->ops.len);
+ if (BC_IS_BC) {
+ bc_vec_npop(&p->flags, p->flags.len - 1);
+ bc_vec_npop(&p->exits, p->exits.len);
+ bc_vec_npop(&p->conds, p->conds.len);
+ bc_vec_npop(&p->ops, p->ops.len);
+ }
#endif // BC_ENABLED
return bc_program_reset(p->prog, s);
}
void bc_parse_free(BcParse *p) {
+
assert(p != NULL);
+
#if BC_ENABLED
- bc_vec_free(&p->flags);
- bc_vec_free(&p->exits);
- bc_vec_free(&p->conds);
- bc_vec_free(&p->ops);
- bc_vec_free(&p->buf);
+ if (BC_IS_BC) {
+ bc_vec_free(&p->flags);
+ bc_vec_free(&p->exits);
+ bc_vec_free(&p->conds);
+ bc_vec_free(&p->ops);
+ bc_vec_free(&p->buf);
+ }
#endif // BC_ENABLED
+
bc_lex_free(&p->l);
}
@@ -166,12 +173,14 @@ void bc_parse_init(BcParse *p, BcProgram *prog, size_t func) {
assert(p != NULL && prog != NULL);
#if BC_ENABLED
- bc_vec_init(&p->flags, sizeof(uint16_t), NULL);
- bc_vec_push(&p->flags, &flag);
- bc_vec_init(&p->exits, sizeof(BcInstPtr), NULL);
- bc_vec_init(&p->conds, sizeof(size_t), NULL);
- bc_vec_init(&p->ops, sizeof(BcLexType), NULL);
- bc_vec_init(&p->buf, sizeof(char), NULL);
+ if (BC_IS_BC) {
+ bc_vec_init(&p->flags, sizeof(uint16_t), NULL);
+ bc_vec_push(&p->flags, &flag);
+ bc_vec_init(&p->exits, sizeof(BcInstPtr), NULL);
+ bc_vec_init(&p->conds, sizeof(size_t), NULL);
+ bc_vec_init(&p->ops, sizeof(BcLexType), NULL);
+ bc_vec_init(&p->buf, sizeof(char), NULL);
+ }
#endif // BC_ENABLED
bc_lex_init(&p->l);
diff --git a/src/program.c b/src/program.c
index ba5fa0e6..1d93da7b 100644
--- a/src/program.c
+++ b/src/program.c
@@ -1534,9 +1534,6 @@ void bc_program_free(BcProgram *p) {
for (i = 0; i < BC_PROG_GLOBALS_LEN; ++i) bc_vec_free(p->globals_v + i);
bc_vec_free(&p->fns);
-#if BC_ENABLED
- bc_vec_free(&p->fn_map);
-#endif // BC_ENABLED
bc_vec_free(&p->vars);
bc_vec_free(&p->var_map);
bc_vec_free(&p->arrs);
@@ -1544,7 +1541,10 @@ void bc_program_free(BcProgram *p) {
bc_vec_free(&p->results);
bc_vec_free(&p->stack);
#if BC_ENABLED
- bc_num_free(&p->last);
+ if (BC_IS_BC) {
+ bc_vec_free(&p->fn_map);
+ bc_num_free(&p->last);
+ }
#endif // BC_ENABLED
}
#endif // NDEBUG
@@ -1568,16 +1568,18 @@ void bc_program_init(BcProgram *p) {
}
#if DC_ENABLED
- p->strm = UCHAR_MAX + 1;
- bc_num_setup(&p->strmb, p->strmb_num, BC_NUM_BIGDIG_LOG10);
- bc_num_bigdig2num(&p->strmb, p->strm);
+ if (!BC_IS_BC) {
+ p->strm = UCHAR_MAX + 1;
+ bc_num_setup(&p->strmb, p->strmb_num, BC_NUM_BIGDIG_LOG10);
+ bc_num_bigdig2num(&p->strmb, p->strm);
+ }
#endif // DC_ENABLED
bc_num_setup(&p->one, p->one_num, BC_PROG_ONE_CAP);
bc_num_one(&p->one);
#if BC_ENABLED
- bc_num_init(&p->last, BC_NUM_DEF_SIZE);
+ if (BC_IS_BC) bc_num_init(&p->last, BC_NUM_DEF_SIZE);
#endif // BC_ENABLED
bc_vec_init(&p->fns, sizeof(BcFunc), bc_func_free);