bc: remove redundant strdup+free in zbc_parse_call()

function                                             old     new   delta
zbc_parse_name                                       527     482     -45
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-45)             Total: -45 bytes
   text	   data	    bss	    dec	    hex	filename
 981541	    485	   7296	 989322	  f188a	busybox_old
 981486	    485	   7296	 989267	  f1853	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko
2018-12-19 13:19:44 +01:00
parent 4796a1d537
commit e3d3d2067d

View File

@ -1210,7 +1210,7 @@ static size_t bc_map_find(const BcVec *v, const void *ptr)
if (result == 0) if (result == 0)
return mid; return mid;
else if (result < 0) if (result < 0)
high = mid; high = mid;
else else
low = mid + 1; low = mid + 1;
@ -3441,6 +3441,7 @@ static BC_STATUS zdc_lex_token(BcLex *l)
static void bc_program_addFunc(char *name, size_t *idx); static void bc_program_addFunc(char *name, size_t *idx);
// Note: takes ownership of 'name' (must be malloced)
static void bc_parse_addFunc(BcParse *p, char *name, size_t *idx) static void bc_parse_addFunc(BcParse *p, char *name, size_t *idx)
{ {
bc_program_addFunc(name, idx); bc_program_addFunc(name, idx);
@ -3494,7 +3495,7 @@ static void bc_parse_pushJUMP_ZERO(BcParse *p, size_t idx)
bc_parse_pushIndex(p, idx); bc_parse_pushIndex(p, idx);
} }
static void bc_parse_number(BcParse *p) static void bc_parse_pushNUM(BcParse *p)
{ {
char *num = xstrdup(p->l.t.v.v); char *num = xstrdup(p->l.t.v.v);
size_t idx = G.prog.consts.len; size_t idx = G.prog.consts.len;
@ -3719,6 +3720,7 @@ static BC_STATUS zbc_parse_params(BcParse *p, uint8_t flags)
} }
#define zbc_parse_params(...) (zbc_parse_params(__VA_ARGS__) COMMA_SUCCESS) #define zbc_parse_params(...) (zbc_parse_params(__VA_ARGS__) COMMA_SUCCESS)
// Note: takes ownership of 'name' (must be malloced)
static BC_STATUS zbc_parse_call(BcParse *p, char *name, uint8_t flags) static BC_STATUS zbc_parse_call(BcParse *p, char *name, uint8_t flags)
{ {
BcStatus s; BcStatus s;
@ -3738,10 +3740,9 @@ static BC_STATUS zbc_parse_call(BcParse *p, char *name, uint8_t flags)
idx = bc_map_index(&G.prog.fn_map, &entry); idx = bc_map_index(&G.prog.fn_map, &entry);
if (idx == BC_VEC_INVALID_IDX) { if (idx == BC_VEC_INVALID_IDX) {
name = xstrdup(entry.name); // No such function exist, create an empty one
bc_parse_addFunc(p, name, &idx); bc_parse_addFunc(p, name, &idx);
idx = bc_map_index(&G.prog.fn_map, &entry); idx = bc_map_index(&G.prog.fn_map, &entry);
free(entry.name);
} else } else
free(name); free(name);
@ -4628,7 +4629,7 @@ static BcStatus bc_parse_expr_empty_ok(BcParse *p, uint8_t flags)
case BC_LEX_NUMBER: case BC_LEX_NUMBER:
if (BC_PARSE_LEAF(prev, rprn)) if (BC_PARSE_LEAF(prev, rprn))
return bc_error_bad_expression(); return bc_error_bad_expression();
bc_parse_number(p); bc_parse_pushNUM(p);
nexprs++; nexprs++;
prev = BC_INST_NUM; prev = BC_INST_NUM;
paren_expr = get_token = true; paren_expr = get_token = true;
@ -4829,7 +4830,7 @@ static BC_STATUS zdc_parse_token(BcParse *p, BcLexType t, uint8_t flags)
if (p->l.t.t != BC_LEX_NUMBER) if (p->l.t.t != BC_LEX_NUMBER)
RETURN_STATUS(bc_error_bad_token()); RETURN_STATUS(bc_error_bad_token());
} }
bc_parse_number(p); bc_parse_pushNUM(p);
if (t == BC_LEX_NEG) bc_parse_push(p, BC_INST_NEG); if (t == BC_LEX_NEG) bc_parse_push(p, BC_INST_NEG);
get_token = true; get_token = true;
break; break;
@ -4964,15 +4965,15 @@ static BC_STATUS zbc_program_num(BcResult *r, BcNum **num, bool hex)
break; break;
case BC_RESULT_CONSTANT: { case BC_RESULT_CONSTANT: {
BcStatus s; BcStatus s;
char **str = bc_vec_item(&G.prog.consts, r->d.id.idx); char *str = *(char**)bc_vec_item(&G.prog.consts, r->d.id.idx);
unsigned base_t; unsigned base_t;
size_t len = strlen(*str); size_t len = strlen(str);
bc_num_init(&r->d.n, len); bc_num_init(&r->d.n, len);
hex = hex && len == 1; hex = hex && len == 1;
base_t = hex ? 16 : G.prog.ib_t; base_t = hex ? 16 : G.prog.ib_t;
s = zbc_num_parse(&r->d.n, *str, base_t); s = zbc_num_parse(&r->d.n, str, base_t);
if (s) { if (s) {
bc_num_free(&r->d.n); bc_num_free(&r->d.n);
@ -6317,6 +6318,7 @@ static void bc_program_pushGlobal(char inst)
bc_vec_push(&G.prog.results, &res); bc_vec_push(&G.prog.results, &res);
} }
// Note: takes ownership of 'name' (must be malloced)
static void bc_program_addFunc(char *name, size_t *idx) static void bc_program_addFunc(char *name, size_t *idx)
{ {
BcId entry, *entry_ptr; BcId entry, *entry_ptr;