diff options
author | Gavin Howard <yzena.tech@gmail.com> | 2019-11-30 16:01:24 -0700 |
---|---|---|
committer | Gavin Howard <yzena.tech@gmail.com> | 2019-11-30 16:01:24 -0700 |
commit | d00e69c2c40868ebcf6c4ddbb4e84cd505273c2e (patch) | |
tree | e3eeb39a751b3d574174c5449346fe66665f32b3 | |
parent | cd2a5b49e62d83683caaa2ba5f9f5c2cf4811527 (diff) | |
download | bc-d00e69c2c40868ebcf6c4ddbb4e84cd505273c2e.tar.gz |
Make each calculator only set up what it has to
-rw-r--r-- | src/lang.c | 26 | ||||
-rw-r--r-- | src/parse.c | 39 | ||||
-rw-r--r-- | src/program.c | 18 |
3 files changed, 50 insertions, 33 deletions
@@ -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); |