diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2019-01-04 00:05:07 +0100 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2019-01-04 00:05:07 +0100 |
commit | 19c3eb0b049c46d365c89c6ff05295fbae0f40a8 (patch) | |
tree | 33675b3302fedec6d96d075643ae944a088320e4 /miscutils/bc.c | |
parent | 96b5ec10fb8abdb8050a6af87330e6cf3d881d5a (diff) |
bc: remove extra div/0 test, remove test for string function parameter
function old new delta
zbc_program_call 354 332 -22
zxc_program_assign 426 385 -41
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-63) Total: -63 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'miscutils/bc.c')
-rw-r--r-- | miscutils/bc.c | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/miscutils/bc.c b/miscutils/bc.c index 6d8e2d991..3bcda08a8 100644 --- a/miscutils/bc.c +++ b/miscutils/bc.c @@ -5793,9 +5793,6 @@ static BC_STATUS zxc_program_assign(char inst) RETURN_STATUS(bc_error_bad_assignment()); #if ENABLE_BC - if (inst == BC_INST_ASSIGN_DIVIDE && !bc_num_cmp(r, &G.prog.zero)) - RETURN_STATUS(bc_error("divide by zero")); - if (assign) bc_num_copy(l, r); else { @@ -5960,12 +5957,10 @@ static BC_STATUS zbc_program_call(char *code, size_t *idx) { BcInstPtr ip; size_t i, nparams; - BcFunc *func; BcId *a; - BcResult *arg; + BcFunc *func; nparams = xc_program_index(code, idx); - ip.inst_idx = 0; ip.func = xc_program_index(code, idx); func = xc_program_func(ip.func); @@ -5975,17 +5970,21 @@ static BC_STATUS zbc_program_call(char *code, size_t *idx) if (nparams != func->nparams) { RETURN_STATUS(bc_error_fmt("function has %u parameters, but called with %u", func->nparams, nparams)); } + ip.inst_idx = 0; ip.results_len_before_call = G.prog.results.len - nparams; for (i = 0; i < nparams; ++i) { + BcResult *arg; BcStatus s; a = bc_vec_item(&func->autos, nparams - 1 - i); arg = bc_vec_top(&G.prog.results); - if ((!a->idx) != (arg->t == XC_RESULT_ARRAY) || arg->t == XC_RESULT_STR) + if ((!a->idx) != (arg->t == XC_RESULT_ARRAY) // array/variable mismatch + // || arg->t == XC_RESULT_STR - impossible, f("str") is not a legal syntax (strings are not bc expressions) + ) { RETURN_STATUS(bc_error_variable_is_wrong_type()); - + } s = zxc_program_copyToVar(a->name, a->idx); if (s) RETURN_STATUS(s); } |