aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2018-12-19 19:35:40 +0100
committerDenys Vlasenko <vda.linux@googlemail.com>2018-12-19 19:38:51 +0100
commitfa2107918386d8262356120f86b846c2c7493b73 (patch)
tree100b026506b60b7e035f774c03ddd6746146e9cb
parent44dbe675ddbcffb37e98358599610b5b81ea0644 (diff)
downloadbusybox-w32-fa2107918386d8262356120f86b846c2c7493b73.tar.gz
busybox-w32-fa2107918386d8262356120f86b846c2c7493b73.tar.bz2
busybox-w32-fa2107918386d8262356120f86b846c2c7493b73.zip
bc: rename dc-specific functions, simplify zdc_program_execStr() a bit
function old new delta zbc_program_execStr 496 - -496 zdc_program_execStr - 491 +491 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--miscutils/bc.c95
1 files changed, 47 insertions, 48 deletions
diff --git a/miscutils/bc.c b/miscutils/bc.c
index 6e15a8c26..fa24f0c9f 100644
--- a/miscutils/bc.c
+++ b/miscutils/bc.c
@@ -2449,7 +2449,7 @@ static BC_STATUS zbc_num_divmod(BcNum *a, BcNum *b, BcNum *c, BcNum *d,
2449#define zbc_num_divmod(...) (zbc_num_divmod(__VA_ARGS__) COMMA_SUCCESS) 2449#define zbc_num_divmod(...) (zbc_num_divmod(__VA_ARGS__) COMMA_SUCCESS)
2450 2450
2451#if ENABLE_DC 2451#if ENABLE_DC
2452static BC_STATUS zbc_num_modexp(BcNum *a, BcNum *b, BcNum *c, BcNum *restrict d) 2452static BC_STATUS zdc_num_modexp(BcNum *a, BcNum *b, BcNum *c, BcNum *restrict d)
2453{ 2453{
2454 BcStatus s; 2454 BcStatus s;
2455 BcNum base, exp, two, temp; 2455 BcNum base, exp, two, temp;
@@ -2498,7 +2498,7 @@ static BC_STATUS zbc_num_modexp(BcNum *a, BcNum *b, BcNum *c, BcNum *restrict d)
2498 bc_num_free(&base); 2498 bc_num_free(&base);
2499 RETURN_STATUS(s); 2499 RETURN_STATUS(s);
2500} 2500}
2501#define zbc_num_modexp(...) (zbc_num_modexp(__VA_ARGS__) COMMA_SUCCESS) 2501#define zdc_num_modexp(...) (zdc_num_modexp(__VA_ARGS__) COMMA_SUCCESS)
2502#endif // ENABLE_DC 2502#endif // ENABLE_DC
2503 2503
2504#if ENABLE_BC 2504#if ENABLE_BC
@@ -2593,7 +2593,7 @@ static FAST_FUNC void bc_string_free(void *string)
2593} 2593}
2594 2594
2595#if ENABLE_DC 2595#if ENABLE_DC
2596static void bc_result_copy(BcResult *d, BcResult *src) 2596static void dc_result_copy(BcResult *d, BcResult *src)
2597{ 2597{
2598 d->t = src->t; 2598 d->t = src->t;
2599 2599
@@ -3589,7 +3589,7 @@ static void bc_parse_free(BcParse *p)
3589 bc_lex_free(&p->l); 3589 bc_lex_free(&p->l);
3590} 3590}
3591 3591
3592static void bc_parse_create(BcParse *p, size_t func) 3592static void bc_parse_create(BcParse *p, size_t fidx)
3593{ 3593{
3594 memset(p, 0, sizeof(BcParse)); 3594 memset(p, 0, sizeof(BcParse));
3595 3595
@@ -3598,8 +3598,8 @@ static void bc_parse_create(BcParse *p, size_t func)
3598 bc_vec_init(&p->conds, sizeof(size_t), NULL); 3598 bc_vec_init(&p->conds, sizeof(size_t), NULL);
3599 bc_vec_init(&p->ops, sizeof(BcLexType), NULL); 3599 bc_vec_init(&p->ops, sizeof(BcLexType), NULL);
3600 3600
3601 p->fidx = func; 3601 p->fidx = fidx;
3602 p->func = bc_program_func(func); 3602 p->func = bc_program_func(fidx);
3603} 3603}
3604 3604
3605#if ENABLE_BC 3605#if ENABLE_BC
@@ -5295,7 +5295,7 @@ static void bc_num_printNewline(void)
5295} 5295}
5296 5296
5297#if ENABLE_DC 5297#if ENABLE_DC
5298static FAST_FUNC void bc_num_printChar(size_t num, size_t width, bool radix) 5298static FAST_FUNC void dc_num_printChar(size_t num, size_t width, bool radix)
5299{ 5299{
5300 (void) radix; 5300 (void) radix;
5301 bb_putchar((char) num); 5301 bb_putchar((char) num);
@@ -5590,7 +5590,7 @@ static BC_STATUS zbc_program_logical(char inst)
5590#define zbc_program_logical(...) (zbc_program_logical(__VA_ARGS__) COMMA_SUCCESS) 5590#define zbc_program_logical(...) (zbc_program_logical(__VA_ARGS__) COMMA_SUCCESS)
5591 5591
5592#if ENABLE_DC 5592#if ENABLE_DC
5593static BC_STATUS zbc_program_assignStr(BcResult *r, BcVec *v, bool push) 5593static BC_STATUS zdc_program_assignStr(BcResult *r, BcVec *v, bool push)
5594{ 5594{
5595 BcNum n2; 5595 BcNum n2;
5596 BcResult res; 5596 BcResult res;
@@ -5613,7 +5613,7 @@ static BC_STATUS zbc_program_assignStr(BcResult *r, BcVec *v, bool push)
5613 5613
5614 RETURN_STATUS(BC_STATUS_SUCCESS); 5614 RETURN_STATUS(BC_STATUS_SUCCESS);
5615} 5615}
5616#define zbc_program_assignStr(...) (zbc_program_assignStr(__VA_ARGS__) COMMA_SUCCESS) 5616#define zdc_program_assignStr(...) (zdc_program_assignStr(__VA_ARGS__) COMMA_SUCCESS)
5617#endif // ENABLE_DC 5617#endif // ENABLE_DC
5618 5618
5619static BC_STATUS zbc_program_copyToVar(char *name, bool var) 5619static BC_STATUS zbc_program_copyToVar(char *name, bool var)
@@ -5635,7 +5635,7 @@ static BC_STATUS zbc_program_copyToVar(char *name, bool var)
5635 if (ptr->t == BC_RESULT_STR && !var) 5635 if (ptr->t == BC_RESULT_STR && !var)
5636 RETURN_STATUS(bc_error_variable_is_wrong_type()); 5636 RETURN_STATUS(bc_error_variable_is_wrong_type());
5637 if (ptr->t == BC_RESULT_STR) 5637 if (ptr->t == BC_RESULT_STR)
5638 RETURN_STATUS(zbc_program_assignStr(ptr, v, true)); 5638 RETURN_STATUS(zdc_program_assignStr(ptr, v, true));
5639#endif 5639#endif
5640 5640
5641 s = zbc_program_num(ptr, &n, false); 5641 s = zbc_program_num(ptr, &n, false);
@@ -5680,7 +5680,7 @@ static BC_STATUS zbc_program_assign(char inst)
5680 RETURN_STATUS(bc_error_variable_is_wrong_type()); 5680 RETURN_STATUS(bc_error_variable_is_wrong_type());
5681 v = bc_program_search(left->d.id.name, true); 5681 v = bc_program_search(left->d.id.name, true);
5682 5682
5683 RETURN_STATUS(zbc_program_assignStr(right, v, false)); 5683 RETURN_STATUS(zdc_program_assignStr(right, v, false));
5684 } 5684 }
5685#endif 5685#endif
5686 5686
@@ -6026,7 +6026,7 @@ static BC_STATUS zbc_program_builtin(char inst)
6026#define zbc_program_builtin(...) (zbc_program_builtin(__VA_ARGS__) COMMA_SUCCESS) 6026#define zbc_program_builtin(...) (zbc_program_builtin(__VA_ARGS__) COMMA_SUCCESS)
6027 6027
6028#if ENABLE_DC 6028#if ENABLE_DC
6029static BC_STATUS zbc_program_divmod(void) 6029static BC_STATUS zdc_program_divmod(void)
6030{ 6030{
6031 BcStatus s; 6031 BcStatus s;
6032 BcResult *opd1, *opd2, res, res2; 6032 BcResult *opd1, *opd2, res, res2;
@@ -6051,9 +6051,9 @@ static BC_STATUS zbc_program_divmod(void)
6051 bc_num_free(&res.d.n); 6051 bc_num_free(&res.d.n);
6052 RETURN_STATUS(s); 6052 RETURN_STATUS(s);
6053} 6053}
6054#define zbc_program_divmod(...) (zbc_program_divmod(__VA_ARGS__) COMMA_SUCCESS) 6054#define zdc_program_divmod(...) (zdc_program_divmod(__VA_ARGS__) COMMA_SUCCESS)
6055 6055
6056static BC_STATUS zbc_program_modexp(void) 6056static BC_STATUS zdc_program_modexp(void)
6057{ 6057{
6058 BcStatus s; 6058 BcStatus s;
6059 BcResult *r1, *r2, *r3, res; 6059 BcResult *r1, *r2, *r3, res;
@@ -6083,7 +6083,7 @@ static BC_STATUS zbc_program_modexp(void)
6083 } 6083 }
6084 6084
6085 bc_num_init(&res.d.n, n3->len); 6085 bc_num_init(&res.d.n, n3->len);
6086 s = zbc_num_modexp(n1, n2, n3, &res.d.n); 6086 s = zdc_num_modexp(n1, n2, n3, &res.d.n);
6087 if (s) goto err; 6087 if (s) goto err;
6088 6088
6089 bc_vec_pop(&G.prog.results); 6089 bc_vec_pop(&G.prog.results);
@@ -6094,9 +6094,9 @@ static BC_STATUS zbc_program_modexp(void)
6094 bc_num_free(&res.d.n); 6094 bc_num_free(&res.d.n);
6095 RETURN_STATUS(s); 6095 RETURN_STATUS(s);
6096} 6096}
6097#define zbc_program_modexp(...) (zbc_program_modexp(__VA_ARGS__) COMMA_SUCCESS) 6097#define zdc_program_modexp(...) (zdc_program_modexp(__VA_ARGS__) COMMA_SUCCESS)
6098 6098
6099static void bc_program_stackLen(void) 6099static void dc_program_stackLen(void)
6100{ 6100{
6101 BcResult res; 6101 BcResult res;
6102 size_t len = G.prog.results.len; 6102 size_t len = G.prog.results.len;
@@ -6108,7 +6108,7 @@ static void bc_program_stackLen(void)
6108 bc_vec_push(&G.prog.results, &res); 6108 bc_vec_push(&G.prog.results, &res);
6109} 6109}
6110 6110
6111static BC_STATUS zbc_program_asciify(void) 6111static BC_STATUS zdc_program_asciify(void)
6112{ 6112{
6113 BcStatus s; 6113 BcStatus s;
6114 BcResult *r, res; 6114 BcResult *r, res;
@@ -6179,36 +6179,37 @@ static BC_STATUS zbc_program_asciify(void)
6179 bc_num_free(&n); 6179 bc_num_free(&n);
6180 RETURN_STATUS(s); 6180 RETURN_STATUS(s);
6181} 6181}
6182#define zbc_program_asciify(...) (zbc_program_asciify(__VA_ARGS__) COMMA_SUCCESS) 6182#define zdc_program_asciify(...) (zdc_program_asciify(__VA_ARGS__) COMMA_SUCCESS)
6183 6183
6184static BC_STATUS zbc_program_printStream(void) 6184static BC_STATUS zdc_program_printStream(void)
6185{ 6185{
6186 BcStatus s; 6186 BcStatus s;
6187 BcResult *r; 6187 BcResult *r;
6188 BcNum *n = NULL; 6188 BcNum *n;
6189 size_t idx; 6189 size_t idx;
6190 char *str;
6191 6190
6192 if (!STACK_HAS_MORE_THAN(&G.prog.results, 0)) 6191 if (!STACK_HAS_MORE_THAN(&G.prog.results, 0))
6193 RETURN_STATUS(bc_error_stack_has_too_few_elements()); 6192 RETURN_STATUS(bc_error_stack_has_too_few_elements());
6194 r = bc_vec_top(&G.prog.results); 6193 r = bc_vec_top(&G.prog.results);
6195 6194
6195 n = NULL; // is this needed?
6196 s = zbc_program_num(r, &n, false); 6196 s = zbc_program_num(r, &n, false);
6197 if (s) RETURN_STATUS(s); 6197 if (s) RETURN_STATUS(s);
6198 6198
6199 if (BC_PROG_NUM(r, n)) { 6199 if (BC_PROG_NUM(r, n)) {
6200 s = zbc_num_printNum(n, 0x100, 1, bc_num_printChar); 6200 s = zbc_num_printNum(n, 0x100, 1, dc_num_printChar);
6201 } else { 6201 } else {
6202 char *str;
6202 idx = (r->t == BC_RESULT_STR) ? r->d.id.idx : n->rdx; 6203 idx = (r->t == BC_RESULT_STR) ? r->d.id.idx : n->rdx;
6203 str = *bc_program_str(idx); 6204 str = *bc_program_str(idx);
6204 printf("%s", str); 6205 fputs(str, stdout);
6205 } 6206 }
6206 6207
6207 RETURN_STATUS(s); 6208 RETURN_STATUS(s);
6208} 6209}
6209#define zbc_program_printStream(...) (zbc_program_printStream(__VA_ARGS__) COMMA_SUCCESS) 6210#define zdc_program_printStream(...) (zdc_program_printStream(__VA_ARGS__) COMMA_SUCCESS)
6210 6211
6211static BC_STATUS zbc_program_nquit(void) 6212static BC_STATUS zdc_program_nquit(void)
6212{ 6213{
6213 BcStatus s; 6214 BcStatus s;
6214 BcResult *opnd; 6215 BcResult *opnd;
@@ -6232,15 +6233,13 @@ static BC_STATUS zbc_program_nquit(void)
6232 6233
6233 RETURN_STATUS(s); 6234 RETURN_STATUS(s);
6234} 6235}
6235#define zbc_program_nquit(...) (zbc_program_nquit(__VA_ARGS__) COMMA_SUCCESS) 6236#define zdc_program_nquit(...) (zdc_program_nquit(__VA_ARGS__) COMMA_SUCCESS)
6236 6237
6237static BC_STATUS zbc_program_execStr(char *code, size_t *bgn, bool cond) 6238static BC_STATUS zdc_program_execStr(char *code, size_t *bgn, bool cond)
6238{ 6239{
6239 BcStatus s = BC_STATUS_SUCCESS; 6240 BcStatus s = BC_STATUS_SUCCESS;
6240 BcResult *r; 6241 BcResult *r;
6241 char **str;
6242 BcFunc *f; 6242 BcFunc *f;
6243 BcParse prs;
6244 BcInstPtr ip; 6243 BcInstPtr ip;
6245 size_t fidx, sidx; 6244 size_t fidx, sidx;
6246 6245
@@ -6298,21 +6297,25 @@ static BC_STATUS zbc_program_execStr(char *code, size_t *bgn, bool cond)
6298 6297
6299 fidx = sidx + BC_PROG_REQ_FUNCS; 6298 fidx = sidx + BC_PROG_REQ_FUNCS;
6300 6299
6301 str = bc_program_str(sidx);
6302 f = bc_program_func(fidx); 6300 f = bc_program_func(fidx);
6303 6301
6304 if (f->code.len == 0) { 6302 if (f->code.len == 0) {
6303 BcParse prs;
6304 char *str;
6305
6305 bc_parse_create(&prs, fidx); 6306 bc_parse_create(&prs, fidx);
6306 s = zbc_parse_text_init(&prs, *str); 6307 str = *bc_program_str(sidx);
6308 s = zbc_parse_text_init(&prs, str);
6307 if (s) goto err; 6309 if (s) goto err;
6308 s = zcommon_parse_expr(&prs, BC_PARSE_NOCALL); 6310 s = zcommon_parse_expr(&prs, BC_PARSE_NOCALL);
6309 if (s) goto err; 6311 if (s) goto err;
6310
6311 if (prs.l.t.t != BC_LEX_EOF) { 6312 if (prs.l.t.t != BC_LEX_EOF) {
6312 s = bc_error_bad_expression(); 6313 s = bc_error_bad_expression();
6313 goto err; 6314 err:
6315 bc_parse_free(&prs);
6316 bc_vec_pop_all(&f->code);
6317 goto exit;
6314 } 6318 }
6315
6316 bc_parse_free(&prs); 6319 bc_parse_free(&prs);
6317 } 6320 }
6318 6321
@@ -6324,15 +6327,11 @@ static BC_STATUS zbc_program_execStr(char *code, size_t *bgn, bool cond)
6324 bc_vec_push(&G.prog.exestack, &ip); 6327 bc_vec_push(&G.prog.exestack, &ip);
6325 6328
6326 RETURN_STATUS(BC_STATUS_SUCCESS); 6329 RETURN_STATUS(BC_STATUS_SUCCESS);
6327 err:
6328 bc_parse_free(&prs);
6329 f = bc_program_func(fidx);
6330 bc_vec_pop_all(&f->code);
6331 exit: 6330 exit:
6332 bc_vec_pop(&G.prog.results); 6331 bc_vec_pop(&G.prog.results);
6333 RETURN_STATUS(s); 6332 RETURN_STATUS(s);
6334} 6333}
6335#define zbc_program_execStr(...) (zbc_program_execStr(__VA_ARGS__) COMMA_SUCCESS) 6334#define zdc_program_execStr(...) (zdc_program_execStr(__VA_ARGS__) COMMA_SUCCESS)
6336#endif // ENABLE_DC 6335#endif // ENABLE_DC
6337 6336
6338static void bc_program_pushGlobal(char inst) 6337static void bc_program_pushGlobal(char inst)
@@ -6515,14 +6514,14 @@ static BC_STATUS zbc_program_exec(void)
6515 break; 6514 break;
6516#if ENABLE_DC 6515#if ENABLE_DC
6517 case BC_INST_MODEXP: 6516 case BC_INST_MODEXP:
6518 s = zbc_program_modexp(); 6517 s = zdc_program_modexp();
6519 break; 6518 break;
6520 case BC_INST_DIVMOD: 6519 case BC_INST_DIVMOD:
6521 s = zbc_program_divmod(); 6520 s = zdc_program_divmod();
6522 break; 6521 break;
6523 case BC_INST_EXECUTE: 6522 case BC_INST_EXECUTE:
6524 case BC_INST_EXEC_COND: 6523 case BC_INST_EXEC_COND:
6525 s = zbc_program_execStr(code, &ip->idx, inst == BC_INST_EXEC_COND); 6524 s = zdc_program_execStr(code, &ip->idx, inst == BC_INST_EXEC_COND);
6526 goto read_updated_ip; 6525 goto read_updated_ip;
6527 case BC_INST_PRINT_STACK: { 6526 case BC_INST_PRINT_STACK: {
6528 size_t idx; 6527 size_t idx;
@@ -6536,13 +6535,13 @@ static BC_STATUS zbc_program_exec(void)
6536 bc_vec_pop_all(&G.prog.results); 6535 bc_vec_pop_all(&G.prog.results);
6537 break; 6536 break;
6538 case BC_INST_STACK_LEN: 6537 case BC_INST_STACK_LEN:
6539 bc_program_stackLen(); 6538 dc_program_stackLen();
6540 break; 6539 break;
6541 case BC_INST_DUPLICATE: 6540 case BC_INST_DUPLICATE:
6542 if (!STACK_HAS_MORE_THAN(&G.prog.results, 0)) 6541 if (!STACK_HAS_MORE_THAN(&G.prog.results, 0))
6543 RETURN_STATUS(bc_error_stack_has_too_few_elements()); 6542 RETURN_STATUS(bc_error_stack_has_too_few_elements());
6544 ptr = bc_vec_top(&G.prog.results); 6543 ptr = bc_vec_top(&G.prog.results);
6545 bc_result_copy(&r, ptr); 6544 dc_result_copy(&r, ptr);
6546 bc_vec_push(&G.prog.results, &r); 6545 bc_vec_push(&G.prog.results, &r);
6547 break; 6546 break;
6548 case BC_INST_SWAP: { 6547 case BC_INST_SWAP: {
@@ -6557,10 +6556,10 @@ static BC_STATUS zbc_program_exec(void)
6557 break; 6556 break;
6558 } 6557 }
6559 case BC_INST_ASCIIFY: 6558 case BC_INST_ASCIIFY:
6560 s = zbc_program_asciify(); 6559 s = zdc_program_asciify();
6561 break; 6560 break;
6562 case BC_INST_PRINT_STREAM: 6561 case BC_INST_PRINT_STREAM:
6563 s = zbc_program_printStream(); 6562 s = zdc_program_printStream();
6564 break; 6563 break;
6565 case BC_INST_LOAD: 6564 case BC_INST_LOAD:
6566 case BC_INST_PUSH_VAR: { 6565 case BC_INST_PUSH_VAR: {
@@ -6581,7 +6580,7 @@ static BC_STATUS zbc_program_exec(void)
6581 bc_vec_npop(&G.prog.exestack, 2); 6580 bc_vec_npop(&G.prog.exestack, 2);
6582 goto read_updated_ip; 6581 goto read_updated_ip;
6583 case BC_INST_NQUIT: 6582 case BC_INST_NQUIT:
6584 s = zbc_program_nquit(); 6583 s = zdc_program_nquit();
6585 //goto read_updated_ip; - just fall through to it 6584 //goto read_updated_ip; - just fall through to it
6586#endif // ENABLE_DC 6585#endif // ENABLE_DC
6587 read_updated_ip: 6586 read_updated_ip: