aboutsummaryrefslogtreecommitdiff
path: root/miscutils
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2018-12-18 16:24:07 +0100
committerDenys Vlasenko <vda.linux@googlemail.com>2018-12-18 16:24:07 +0100
commit7f2d59c38dcc56ea4e89c9ea64d56c349a51eaba (patch)
tree25a13803b54cd88746f1d96a424bb71851fc3924 /miscutils
parent3f940c9c707904df545c148065f720d33e805aed (diff)
downloadbusybox-w32-7f2d59c38dcc56ea4e89c9ea64d56c349a51eaba.tar.gz
busybox-w32-7f2d59c38dcc56ea4e89c9ea64d56c349a51eaba.tar.bz2
busybox-w32-7f2d59c38dcc56ea4e89c9ea64d56c349a51eaba.zip
bc: style edit, no code changes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'miscutils')
-rw-r--r--miscutils/bc.c236
1 files changed, 57 insertions, 179 deletions
diff --git a/miscutils/bc.c b/miscutils/bc.c
index 2da7c317c..7ecddf014 100644
--- a/miscutils/bc.c
+++ b/miscutils/bc.c
@@ -236,7 +236,6 @@ typedef struct BcNum {
236#define BC_NUM_KARATSUBA_LEN (32) 236#define BC_NUM_KARATSUBA_LEN (32)
237 237
238typedef enum BcInst { 238typedef enum BcInst {
239
240#if ENABLE_BC 239#if ENABLE_BC
241 BC_INST_INC_PRE, 240 BC_INST_INC_PRE,
242 BC_INST_DEC_PRE, 241 BC_INST_DEC_PRE,
@@ -333,7 +332,6 @@ typedef enum BcInst {
333 332
334 BC_INST_INVALID = -1, 333 BC_INST_INVALID = -1,
335#endif 334#endif
336
337} BcInst; 335} BcInst;
338 336
339typedef struct BcId { 337typedef struct BcId {
@@ -349,7 +347,6 @@ typedef struct BcFunc {
349} BcFunc; 347} BcFunc;
350 348
351typedef enum BcResultType { 349typedef enum BcResultType {
352
353 BC_RESULT_TEMP, 350 BC_RESULT_TEMP,
354 351
355 BC_RESULT_VAR, 352 BC_RESULT_VAR,
@@ -367,7 +364,6 @@ typedef enum BcResultType {
367 BC_RESULT_ONE, 364 BC_RESULT_ONE,
368 365
369 BC_RESULT_OBASE, 366 BC_RESULT_OBASE,
370
371} BcResultType; 367} BcResultType;
372 368
373typedef union BcResultData { 369typedef union BcResultData {
@@ -675,7 +671,6 @@ typedef struct BcParse {
675} BcParse; 671} BcParse;
676 672
677typedef struct BcProgram { 673typedef struct BcProgram {
678
679 size_t len; 674 size_t len;
680 size_t scale; 675 size_t scale;
681 676
@@ -709,7 +704,6 @@ typedef struct BcProgram {
709 BcNum one; 704 BcNum one;
710 705
711 size_t nchars; 706 size_t nchars;
712
713} BcProgram; 707} BcProgram;
714 708
715#define BC_PROG_STACK(s, n) ((s)->len >= ((size_t) n)) 709#define BC_PROG_STACK(s, n) ((s)->len >= ((size_t) n))
@@ -1124,7 +1118,6 @@ static void bc_vec_pushAt(BcVec *v, const void *data, size_t idx)
1124 if (idx == v->len) 1118 if (idx == v->len)
1125 bc_vec_push(v, data); 1119 bc_vec_push(v, data);
1126 else { 1120 else {
1127
1128 char *ptr; 1121 char *ptr;
1129 1122
1130 if (v->len == v->cap) bc_vec_grow(v, 1); 1123 if (v->len == v->cap) bc_vec_grow(v, 1);
@@ -1210,7 +1203,6 @@ static size_t bc_map_find(const BcVec *v, const void *ptr)
1210 size_t low = 0, high = v->len; 1203 size_t low = 0, high = v->len;
1211 1204
1212 while (low < high) { 1205 while (low < high) {
1213
1214 size_t mid = (low + high) / 2; 1206 size_t mid = (low + high) / 2;
1215 BcId *id = bc_vec_item(v, mid); 1207 BcId *id = bc_vec_item(v, mid);
1216 int result = bc_id_cmp(ptr, id); 1208 int result = bc_id_cmp(ptr, id);
@@ -1421,7 +1413,6 @@ static BC_STATUS zbc_num_ulong(BcNum *n, unsigned long *result_p)
1421 if (n->neg) RETURN_STATUS(bc_error("negative number")); 1413 if (n->neg) RETURN_STATUS(bc_error("negative number"));
1422 1414
1423 for (result = 0, pow = 1, i = n->rdx; i < n->len; ++i) { 1415 for (result = 0, pow = 1, i = n->rdx; i < n->len; ++i) {
1424
1425 unsigned long prev = result, powprev = pow; 1416 unsigned long prev = result, powprev = pow;
1426 1417
1427 result += ((unsigned long) n->num[i]) * pow; 1418 result += ((unsigned long) n->num[i]) * pow;
@@ -1461,8 +1452,7 @@ static void bc_num_ulong2num(BcNum *n, unsigned long val)
1461 } 1452 }
1462} 1453}
1463 1454
1464static void bc_num_subArrays(BcDig *restrict a, BcDig *restrict b, 1455static void bc_num_subArrays(BcDig *restrict a, BcDig *restrict b, size_t len)
1465 size_t len)
1466{ 1456{
1467 size_t i, j; 1457 size_t i, j;
1468 for (i = 0; i < len; ++i) { 1458 for (i = 0; i < len; ++i) {
@@ -1556,7 +1546,6 @@ static void bc_num_extend(BcNum *n, size_t places)
1556 size_t len = n->len + places; 1546 size_t len = n->len + places;
1557 1547
1558 if (places != 0) { 1548 if (places != 0) {
1559
1560 if (n->cap < len) bc_num_expand(n, len); 1549 if (n->cap < len) bc_num_expand(n, len);
1561 1550
1562 memmove(n->num + places, n->num, sizeof(BcDig) * n->len); 1551 memmove(n->num + places, n->num, sizeof(BcDig) * n->len);
@@ -1591,15 +1580,13 @@ static void bc_num_split(BcNum *restrict n, size_t idx, BcNum *restrict a,
1591 BcNum *restrict b) 1580 BcNum *restrict b)
1592{ 1581{
1593 if (idx < n->len) { 1582 if (idx < n->len) {
1594
1595 b->len = n->len - idx; 1583 b->len = n->len - idx;
1596 a->len = idx; 1584 a->len = idx;
1597 a->rdx = b->rdx = 0; 1585 a->rdx = b->rdx = 0;
1598 1586
1599 memcpy(b->num, n->num + idx, b->len * sizeof(BcDig)); 1587 memcpy(b->num, n->num + idx, b->len * sizeof(BcDig));
1600 memcpy(a->num, n->num, idx * sizeof(BcDig)); 1588 memcpy(a->num, n->num, idx * sizeof(BcDig));
1601 } 1589 } else {
1602 else {
1603 bc_num_zero(b); 1590 bc_num_zero(b);
1604 bc_num_copy(a, n); 1591 bc_num_copy(a, n);
1605 } 1592 }
@@ -1869,8 +1856,7 @@ static FAST_FUNC BC_STATUS zbc_num_k(BcNum *restrict a, BcNum *restrict b,
1869 s = zbc_num_add(&z0, &z1, &temp, 0); 1856 s = zbc_num_add(&z0, &z1, &temp, 0);
1870 if (s) goto err; 1857 if (s) goto err;
1871 s = zbc_num_add(&temp, &z2, c, 0); 1858 s = zbc_num_add(&temp, &z2, c, 0);
1872 1859 err:
1873err:
1874 bc_num_free(&temp); 1860 bc_num_free(&temp);
1875 bc_num_free(&z2); 1861 bc_num_free(&z2);
1876 bc_num_free(&z1); 1862 bc_num_free(&z1);
@@ -1919,8 +1905,7 @@ static FAST_FUNC BC_STATUS zbc_num_m(BcNum *a, BcNum *b, BcNum *restrict c, size
1919 1905
1920 c->rdx = maxrdx; 1906 c->rdx = maxrdx;
1921 bc_num_retireMul(c, scale, a->neg, b->neg); 1907 bc_num_retireMul(c, scale, a->neg, b->neg);
1922 1908 err:
1923err:
1924 bc_num_free(&cpb); 1909 bc_num_free(&cpb);
1925 bc_num_free(&cpa); 1910 bc_num_free(&cpa);
1926 RETURN_STATUS(s); 1911 RETURN_STATUS(s);
@@ -2037,8 +2022,7 @@ static FAST_FUNC BC_STATUS zbc_num_r(BcNum *a, BcNum *b, BcNum *restrict c,
2037 neg = d->neg; 2022 neg = d->neg;
2038 bc_num_retireMul(d, ts, a->neg, b->neg); 2023 bc_num_retireMul(d, ts, a->neg, b->neg);
2039 d->neg = neg; 2024 d->neg = neg;
2040 2025 err:
2041err:
2042 bc_num_free(&temp); 2026 bc_num_free(&temp);
2043 RETURN_STATUS(s); 2027 RETURN_STATUS(s);
2044} 2028}
@@ -2311,13 +2295,13 @@ static void bc_num_parseBase(BcNum *n, const char *val, unsigned base_t)
2311 if (s) goto err; 2295 if (s) goto err;
2312 2296
2313 if (n->len != 0) { 2297 if (n->len != 0) {
2314 if (n->rdx < digits) bc_num_extend(n, digits - n->rdx); 2298 if (n->rdx < digits)
2299 bc_num_extend(n, digits - n->rdx);
2315 } else 2300 } else
2316 bc_num_zero(n); 2301 bc_num_zero(n);
2317 2302 err:
2318err:
2319 bc_num_free(&result); 2303 bc_num_free(&result);
2320int_err: 2304 int_err:
2321 bc_num_free(&base); 2305 bc_num_free(&base);
2322 bc_num_free(&mult); 2306 bc_num_free(&mult);
2323 bc_num_free(&temp); 2307 bc_num_free(&temp);
@@ -2353,9 +2337,11 @@ static BC_STATUS zbc_num_sqrt(BcNum *a, BcNum *restrict b, size_t scale)
2353 if (a->len == 0) { 2337 if (a->len == 0) {
2354 bc_num_setToZero(b, scale); 2338 bc_num_setToZero(b, scale);
2355 RETURN_STATUS(BC_STATUS_SUCCESS); 2339 RETURN_STATUS(BC_STATUS_SUCCESS);
2356 } else if (a->neg) { 2340 }
2341 if (a->neg) {
2357 RETURN_STATUS(bc_error("negative number")); 2342 RETURN_STATUS(bc_error("negative number"));
2358 } else if (BC_NUM_ONE(a)) { 2343 }
2344 if (BC_NUM_ONE(a)) {
2359 bc_num_one(b); 2345 bc_num_one(b);
2360 bc_num_extend(b, scale); 2346 bc_num_extend(b, scale);
2361 RETURN_STATUS(BC_STATUS_SUCCESS); 2347 RETURN_STATUS(BC_STATUS_SUCCESS);
@@ -3767,8 +3753,7 @@ static BC_STATUS zbc_parse_call(BcParse *p, char *name, uint8_t flags)
3767 bc_parse_pushIndex(p, entry_ptr->idx); 3753 bc_parse_pushIndex(p, entry_ptr->idx);
3768 3754
3769 RETURN_STATUS(zbc_lex_next(&p->l)); 3755 RETURN_STATUS(zbc_lex_next(&p->l));
3770 3756 err:
3771err:
3772 free(name); 3757 free(name);
3773 RETURN_STATUS(s); 3758 RETURN_STATUS(s);
3774} 3759}
@@ -3804,8 +3789,7 @@ static BC_STATUS zbc_parse_name(BcParse *p, BcInst *type, uint8_t flags)
3804 bc_parse_push(p, *type); 3789 bc_parse_push(p, *type);
3805 bc_parse_pushName(p, name); 3790 bc_parse_pushName(p, name);
3806 free(name); 3791 free(name);
3807 } 3792 } else if (p->l.t.t == BC_LEX_LPAREN) {
3808 else if (p->l.t.t == BC_LEX_LPAREN) {
3809 if (flags & BC_PARSE_NOCALL) { 3793 if (flags & BC_PARSE_NOCALL) {
3810 s = bc_error_bad_token(); 3794 s = bc_error_bad_token();
3811 goto err; 3795 goto err;
@@ -3820,8 +3804,7 @@ static BC_STATUS zbc_parse_name(BcParse *p, BcInst *type, uint8_t flags)
3820 } 3804 }
3821 3805
3822 RETURN_STATUS(s); 3806 RETURN_STATUS(s);
3823 3807 err:
3824err:
3825 free(name); 3808 free(name);
3826 RETURN_STATUS(s); 3809 RETURN_STATUS(s);
3827} 3810}
@@ -3908,15 +3891,14 @@ static BC_STATUS zbc_parse_incdec(BcParse *p, BcInst *prev, bool *paren_expr,
3908 char inst; 3891 char inst;
3909 BcInst etype = *prev; 3892 BcInst etype = *prev;
3910 3893
3911 if (etype == BC_INST_VAR || etype == BC_INST_ARRAY_ELEM || 3894 if (etype == BC_INST_VAR || etype == BC_INST_ARRAY_ELEM
3912 etype == BC_INST_SCALE || etype == BC_INST_LAST || 3895 || etype == BC_INST_SCALE || etype == BC_INST_LAST
3913 etype == BC_INST_IBASE || etype == BC_INST_OBASE) 3896 || etype == BC_INST_IBASE || etype == BC_INST_OBASE
3914 { 3897 ) {
3915 *prev = inst = BC_INST_INC_POST + (p->l.t.t != BC_LEX_OP_INC); 3898 *prev = inst = BC_INST_INC_POST + (p->l.t.t != BC_LEX_OP_INC);
3916 bc_parse_push(p, inst); 3899 bc_parse_push(p, inst);
3917 s = zbc_lex_next(&p->l); 3900 s = zbc_lex_next(&p->l);
3918 } 3901 } else {
3919 else {
3920 *prev = inst = BC_INST_INC_PRE + (p->l.t.t != BC_LEX_OP_INC); 3902 *prev = inst = BC_INST_INC_PRE + (p->l.t.t != BC_LEX_OP_INC);
3921 *paren_expr = true; 3903 *paren_expr = true;
3922 3904
@@ -4339,8 +4321,7 @@ static BC_STATUS zbc_parse_funcdef(BcParse *p)
4339 4321
4340 dbg_lex_done("%s:%d done", __func__, __LINE__); 4322 dbg_lex_done("%s:%d done", __func__, __LINE__);
4341 RETURN_STATUS(s); 4323 RETURN_STATUS(s);
4342 4324 err:
4343err:
4344 dbg_lex_done("%s:%d done (error)", __func__, __LINE__); 4325 dbg_lex_done("%s:%d done (error)", __func__, __LINE__);
4345 free(name); 4326 free(name);
4346 RETURN_STATUS(s); 4327 RETURN_STATUS(s);
@@ -4397,8 +4378,7 @@ static BC_STATUS zbc_parse_auto(BcParse *p)
4397 4378
4398 dbg_lex_done("%s:%d done", __func__, __LINE__); 4379 dbg_lex_done("%s:%d done", __func__, __LINE__);
4399 RETURN_STATUS(zbc_lex_next(&p->l)); 4380 RETURN_STATUS(zbc_lex_next(&p->l));
4400 4381 err:
4401err:
4402 free(name); 4382 free(name);
4403 dbg_lex_done("%s:%d done (ERROR)", __func__, __LINE__); 4383 dbg_lex_done("%s:%d done (ERROR)", __func__, __LINE__);
4404 RETURN_STATUS(s); 4384 RETURN_STATUS(s);
@@ -4561,23 +4541,16 @@ static BcStatus bc_parse_expr_empty_ok(BcParse *p, uint8_t flags)
4561 4541
4562 for (; !G_interrupt && !s && !done && bc_parse_exprs(t); t = p->l.t.t) { 4542 for (; !G_interrupt && !s && !done && bc_parse_exprs(t); t = p->l.t.t) {
4563 switch (t) { 4543 switch (t) {
4564
4565 case BC_LEX_OP_INC: 4544 case BC_LEX_OP_INC:
4566 case BC_LEX_OP_DEC: 4545 case BC_LEX_OP_DEC:
4567 {
4568 s = zbc_parse_incdec(p, &prev, &paren_expr, &nexprs, flags); 4546 s = zbc_parse_incdec(p, &prev, &paren_expr, &nexprs, flags);
4569 rprn = get_token = bin_last = false; 4547 rprn = get_token = bin_last = false;
4570 break; 4548 break;
4571 }
4572
4573 case BC_LEX_OP_MINUS: 4549 case BC_LEX_OP_MINUS:
4574 {
4575 s = zbc_parse_minus(p, &prev, ops_bgn, rprn, &nexprs); 4550 s = zbc_parse_minus(p, &prev, ops_bgn, rprn, &nexprs);
4576 rprn = get_token = false; 4551 rprn = get_token = false;
4577 bin_last = prev == BC_INST_MINUS; 4552 bin_last = prev == BC_INST_MINUS;
4578 break; 4553 break;
4579 }
4580
4581 case BC_LEX_OP_ASSIGN_POWER: 4554 case BC_LEX_OP_ASSIGN_POWER:
4582 case BC_LEX_OP_ASSIGN_MULTIPLY: 4555 case BC_LEX_OP_ASSIGN_MULTIPLY:
4583 case BC_LEX_OP_ASSIGN_DIVIDE: 4556 case BC_LEX_OP_ASSIGN_DIVIDE:
@@ -4585,18 +4558,16 @@ static BcStatus bc_parse_expr_empty_ok(BcParse *p, uint8_t flags)
4585 case BC_LEX_OP_ASSIGN_PLUS: 4558 case BC_LEX_OP_ASSIGN_PLUS:
4586 case BC_LEX_OP_ASSIGN_MINUS: 4559 case BC_LEX_OP_ASSIGN_MINUS:
4587 case BC_LEX_OP_ASSIGN: 4560 case BC_LEX_OP_ASSIGN:
4588 { 4561 if (prev != BC_INST_VAR && prev != BC_INST_ARRAY_ELEM
4589 if (prev != BC_INST_VAR && prev != BC_INST_ARRAY_ELEM && 4562 && prev != BC_INST_SCALE && prev != BC_INST_IBASE
4590 prev != BC_INST_SCALE && prev != BC_INST_IBASE && 4563 && prev != BC_INST_OBASE && prev != BC_INST_LAST
4591 prev != BC_INST_OBASE && prev != BC_INST_LAST) 4564 ) {
4592 {
4593 s = bc_error("bad assignment:" 4565 s = bc_error("bad assignment:"
4594 " left side must be variable" 4566 " left side must be variable"
4595 " or array element" 4567 " or array element"
4596 ); // note: shared string 4568 ); // note: shared string
4597 break; 4569 break;
4598 } 4570 }
4599 }
4600 // Fallthrough. 4571 // Fallthrough.
4601 case BC_LEX_OP_POWER: 4572 case BC_LEX_OP_POWER:
4602 case BC_LEX_OP_MULTIPLY: 4573 case BC_LEX_OP_MULTIPLY:
@@ -4612,74 +4583,53 @@ static BcStatus bc_parse_expr_empty_ok(BcParse *p, uint8_t flags)
4612 case BC_LEX_OP_BOOL_NOT: 4583 case BC_LEX_OP_BOOL_NOT:
4613 case BC_LEX_OP_BOOL_OR: 4584 case BC_LEX_OP_BOOL_OR:
4614 case BC_LEX_OP_BOOL_AND: 4585 case BC_LEX_OP_BOOL_AND:
4615 {
4616 if (((t == BC_LEX_OP_BOOL_NOT) != bin_last) 4586 if (((t == BC_LEX_OP_BOOL_NOT) != bin_last)
4617 || (t != BC_LEX_OP_BOOL_NOT && prev == BC_INST_BOOL_NOT) 4587 || (t != BC_LEX_OP_BOOL_NOT && prev == BC_INST_BOOL_NOT)
4618 ) { 4588 ) {
4619 return bc_error_bad_expression(); 4589 return bc_error_bad_expression();
4620 } 4590 }
4621
4622 nrelops += t >= BC_LEX_OP_REL_EQ && t <= BC_LEX_OP_REL_GT; 4591 nrelops += t >= BC_LEX_OP_REL_EQ && t <= BC_LEX_OP_REL_GT;
4623 prev = BC_TOKEN_2_INST(t); 4592 prev = BC_TOKEN_2_INST(t);
4624 bc_parse_operator(p, t, ops_bgn, &nexprs); 4593 bc_parse_operator(p, t, ops_bgn, &nexprs);
4625 s = zbc_lex_next(&p->l); 4594 s = zbc_lex_next(&p->l);
4626 rprn = get_token = false; 4595 rprn = get_token = false;
4627 bin_last = t != BC_LEX_OP_BOOL_NOT; 4596 bin_last = t != BC_LEX_OP_BOOL_NOT;
4628
4629 break; 4597 break;
4630 }
4631
4632 case BC_LEX_LPAREN: 4598 case BC_LEX_LPAREN:
4633 {
4634 if (BC_PARSE_LEAF(prev, rprn)) 4599 if (BC_PARSE_LEAF(prev, rprn))
4635 return bc_error_bad_expression(); 4600 return bc_error_bad_expression();
4636 ++nparens; 4601 ++nparens;
4637 paren_expr = rprn = bin_last = false; 4602 paren_expr = rprn = bin_last = false;
4638 get_token = true; 4603 get_token = true;
4639 bc_vec_push(&p->ops, &t); 4604 bc_vec_push(&p->ops, &t);
4640
4641 break; 4605 break;
4642 }
4643
4644 case BC_LEX_RPAREN: 4606 case BC_LEX_RPAREN:
4645 {
4646 if (bin_last || prev == BC_INST_BOOL_NOT) 4607 if (bin_last || prev == BC_INST_BOOL_NOT)
4647 return bc_error_bad_expression(); 4608 return bc_error_bad_expression();
4648
4649 if (nparens == 0) { 4609 if (nparens == 0) {
4650 s = BC_STATUS_SUCCESS; 4610 s = BC_STATUS_SUCCESS;
4651 done = true; 4611 done = true;
4652 get_token = false; 4612 get_token = false;
4653 break; 4613 break;
4654 } 4614 }
4655 else if (!paren_expr) { 4615 if (!paren_expr) {
4656 dbg_lex_done("%s:%d done (returning EMPTY_EXP)", __func__, __LINE__); 4616 dbg_lex_done("%s:%d done (returning EMPTY_EXP)", __func__, __LINE__);
4657 return BC_STATUS_PARSE_EMPTY_EXP; 4617 return BC_STATUS_PARSE_EMPTY_EXP;
4658 } 4618 }
4659
4660 --nparens; 4619 --nparens;
4661 paren_expr = rprn = true; 4620 paren_expr = rprn = true;
4662 get_token = bin_last = false; 4621 get_token = bin_last = false;
4663
4664 s = zbc_parse_rightParen(p, ops_bgn, &nexprs); 4622 s = zbc_parse_rightParen(p, ops_bgn, &nexprs);
4665
4666 break; 4623 break;
4667 }
4668
4669 case BC_LEX_NAME: 4624 case BC_LEX_NAME:
4670 {
4671 if (BC_PARSE_LEAF(prev, rprn)) 4625 if (BC_PARSE_LEAF(prev, rprn))
4672 return bc_error_bad_expression(); 4626 return bc_error_bad_expression();
4673 paren_expr = true; 4627 paren_expr = true;
4674 rprn = get_token = bin_last = false; 4628 rprn = get_token = bin_last = false;
4675 s = zbc_parse_name(p, &prev, flags & ~BC_PARSE_NOCALL); 4629 s = zbc_parse_name(p, &prev, flags & ~BC_PARSE_NOCALL);
4676 ++nexprs; 4630 ++nexprs;
4677
4678 break; 4631 break;
4679 }
4680
4681 case BC_LEX_NUMBER: 4632 case BC_LEX_NUMBER:
4682 {
4683 if (BC_PARSE_LEAF(prev, rprn)) 4633 if (BC_PARSE_LEAF(prev, rprn))
4684 return bc_error_bad_expression(); 4634 return bc_error_bad_expression();
4685 bc_parse_number(p); 4635 bc_parse_number(p);
@@ -4687,58 +4637,40 @@ static BcStatus bc_parse_expr_empty_ok(BcParse *p, uint8_t flags)
4687 prev = BC_INST_NUM; 4637 prev = BC_INST_NUM;
4688 paren_expr = get_token = true; 4638 paren_expr = get_token = true;
4689 rprn = bin_last = false; 4639 rprn = bin_last = false;
4690
4691 break; 4640 break;
4692 }
4693
4694 case BC_LEX_KEY_IBASE: 4641 case BC_LEX_KEY_IBASE:
4695 case BC_LEX_KEY_LAST: 4642 case BC_LEX_KEY_LAST:
4696 case BC_LEX_KEY_OBASE: 4643 case BC_LEX_KEY_OBASE:
4697 {
4698 if (BC_PARSE_LEAF(prev, rprn)) 4644 if (BC_PARSE_LEAF(prev, rprn))
4699 return bc_error_bad_expression(); 4645 return bc_error_bad_expression();
4700 prev = (char) (t - BC_LEX_KEY_IBASE + BC_INST_IBASE); 4646 prev = (char) (t - BC_LEX_KEY_IBASE + BC_INST_IBASE);
4701 bc_parse_push(p, (char) prev); 4647 bc_parse_push(p, (char) prev);
4702
4703 paren_expr = get_token = true; 4648 paren_expr = get_token = true;
4704 rprn = bin_last = false; 4649 rprn = bin_last = false;
4705 ++nexprs; 4650 ++nexprs;
4706
4707 break; 4651 break;
4708 }
4709
4710 case BC_LEX_KEY_LENGTH: 4652 case BC_LEX_KEY_LENGTH:
4711 case BC_LEX_KEY_SQRT: 4653 case BC_LEX_KEY_SQRT:
4712 {
4713 if (BC_PARSE_LEAF(prev, rprn)) 4654 if (BC_PARSE_LEAF(prev, rprn))
4714 return bc_error_bad_expression(); 4655 return bc_error_bad_expression();
4715 s = zbc_parse_builtin(p, t, flags, &prev); 4656 s = zbc_parse_builtin(p, t, flags, &prev);
4716 paren_expr = true; 4657 paren_expr = true;
4717 rprn = get_token = bin_last = false; 4658 rprn = get_token = bin_last = false;
4718 ++nexprs; 4659 ++nexprs;
4719
4720 break; 4660 break;
4721 }
4722
4723 case BC_LEX_KEY_READ: 4661 case BC_LEX_KEY_READ:
4724 {
4725 if (BC_PARSE_LEAF(prev, rprn)) 4662 if (BC_PARSE_LEAF(prev, rprn))
4726 return bc_error_bad_expression(); 4663 return bc_error_bad_expression();
4727 else if (flags & BC_PARSE_NOREAD) 4664 else if (flags & BC_PARSE_NOREAD)
4728 s = bc_error_nested_read_call(); 4665 s = bc_error_nested_read_call();
4729 else 4666 else
4730 s = zbc_parse_read(p); 4667 s = zbc_parse_read(p);
4731
4732 paren_expr = true; 4668 paren_expr = true;
4733 rprn = get_token = bin_last = false; 4669 rprn = get_token = bin_last = false;
4734 ++nexprs; 4670 ++nexprs;
4735 prev = BC_INST_READ; 4671 prev = BC_INST_READ;
4736
4737 break; 4672 break;
4738 }
4739
4740 case BC_LEX_KEY_SCALE: 4673 case BC_LEX_KEY_SCALE:
4741 {
4742 if (BC_PARSE_LEAF(prev, rprn)) 4674 if (BC_PARSE_LEAF(prev, rprn))
4743 return bc_error_bad_expression(); 4675 return bc_error_bad_expression();
4744 s = zbc_parse_scale(p, &prev, flags); 4676 s = zbc_parse_scale(p, &prev, flags);
@@ -4746,15 +4678,10 @@ static BcStatus bc_parse_expr_empty_ok(BcParse *p, uint8_t flags)
4746 rprn = get_token = bin_last = false; 4678 rprn = get_token = bin_last = false;
4747 ++nexprs; 4679 ++nexprs;
4748 prev = BC_INST_SCALE; 4680 prev = BC_INST_SCALE;
4749
4750 break; 4681 break;
4751 }
4752
4753 default: 4682 default:
4754 {
4755 s = bc_error_bad_token(); 4683 s = bc_error_bad_token();
4756 break; 4684 break;
4757 }
4758 } 4685 }
4759 4686
4760 if (!s && get_token) s = zbc_lex_next(&p->l); 4687 if (!s && get_token) s = zbc_lex_next(&p->l);
@@ -4764,7 +4691,6 @@ static BcStatus bc_parse_expr_empty_ok(BcParse *p, uint8_t flags)
4764 if (G_interrupt) return BC_STATUS_FAILURE; // ^C: stop parsing 4691 if (G_interrupt) return BC_STATUS_FAILURE; // ^C: stop parsing
4765 4692
4766 while (p->ops.len > ops_bgn) { 4693 while (p->ops.len > ops_bgn) {
4767
4768 top = BC_PARSE_TOP_OP(p); 4694 top = BC_PARSE_TOP_OP(p);
4769 assign = top >= BC_LEX_OP_ASSIGN_POWER && top <= BC_LEX_OP_ASSIGN; 4695 assign = top >= BC_LEX_OP_ASSIGN_POWER && top <= BC_LEX_OP_ASSIGN;
4770 4696
@@ -4783,8 +4709,7 @@ static BcStatus bc_parse_expr_empty_ok(BcParse *p, uint8_t flags)
4783 if (!(flags & BC_PARSE_REL) && nrelops) { 4709 if (!(flags & BC_PARSE_REL) && nrelops) {
4784 s = bc_POSIX_does_not_allow("comparison operators outside if or loops"); 4710 s = bc_POSIX_does_not_allow("comparison operators outside if or loops");
4785 IF_ERROR_RETURN_POSSIBLE(if (s) return s); 4711 IF_ERROR_RETURN_POSSIBLE(if (s) return s);
4786 } 4712 } else if ((flags & BC_PARSE_REL) && nrelops > 1) {
4787 else if ((flags & BC_PARSE_REL) && nrelops > 1) {
4788 s = bc_POSIX_requires("exactly one comparison operator per condition"); 4713 s = bc_POSIX_requires("exactly one comparison operator per condition");
4789 IF_ERROR_RETURN_POSSIBLE(if (s) return s); 4714 IF_ERROR_RETURN_POSSIBLE(if (s) return s);
4790 } 4715 }
@@ -4871,8 +4796,7 @@ static BC_STATUS zdc_parse_cond(BcParse *p, uint8_t inst)
4871 s = zdc_parse_register(p); 4796 s = zdc_parse_register(p);
4872 if (s) RETURN_STATUS(s); 4797 if (s) RETURN_STATUS(s);
4873 s = zbc_lex_next(&p->l); 4798 s = zbc_lex_next(&p->l);
4874 } 4799 } else
4875 else
4876 bc_parse_push(p, BC_PARSE_STREND); 4800 bc_parse_push(p, BC_PARSE_STREND);
4877 4801
4878 RETURN_STATUS(s); 4802 RETURN_STATUS(s);
@@ -5035,19 +4959,14 @@ static BcVec* bc_program_search(char *id, bool var)
5035static BC_STATUS zbc_program_num(BcResult *r, BcNum **num, bool hex) 4959static BC_STATUS zbc_program_num(BcResult *r, BcNum **num, bool hex)
5036{ 4960{
5037 switch (r->t) { 4961 switch (r->t) {
5038
5039 case BC_RESULT_STR: 4962 case BC_RESULT_STR:
5040 case BC_RESULT_TEMP: 4963 case BC_RESULT_TEMP:
5041 case BC_RESULT_IBASE: 4964 case BC_RESULT_IBASE:
5042 case BC_RESULT_SCALE: 4965 case BC_RESULT_SCALE:
5043 case BC_RESULT_OBASE: 4966 case BC_RESULT_OBASE:
5044 {
5045 *num = &r->d.n; 4967 *num = &r->d.n;
5046 break; 4968 break;
5047 } 4969 case BC_RESULT_CONSTANT: {
5048
5049 case BC_RESULT_CONSTANT:
5050 {
5051 BcStatus s; 4970 BcStatus s;
5052 char **str = bc_vec_item(&G.prog.consts, r->d.id.idx); 4971 char **str = bc_vec_item(&G.prog.consts, r->d.id.idx);
5053 unsigned base_t; 4972 unsigned base_t;
@@ -5066,14 +4985,11 @@ static BC_STATUS zbc_program_num(BcResult *r, BcNum **num, bool hex)
5066 4985
5067 *num = &r->d.n; 4986 *num = &r->d.n;
5068 r->t = BC_RESULT_TEMP; 4987 r->t = BC_RESULT_TEMP;
5069
5070 break; 4988 break;
5071 } 4989 }
5072
5073 case BC_RESULT_VAR: 4990 case BC_RESULT_VAR:
5074 case BC_RESULT_ARRAY: 4991 case BC_RESULT_ARRAY:
5075 case BC_RESULT_ARRAY_ELEM: 4992 case BC_RESULT_ARRAY_ELEM: {
5076 {
5077 BcVec *v; 4993 BcVec *v;
5078 4994
5079 v = bc_program_search(r->d.id.name, r->t == BC_RESULT_VAR); 4995 v = bc_program_search(r->d.id.name, r->t == BC_RESULT_VAR);
@@ -5082,24 +4998,16 @@ static BC_STATUS zbc_program_num(BcResult *r, BcNum **num, bool hex)
5082 v = bc_vec_top(v); 4998 v = bc_vec_top(v);
5083 if (v->len <= r->d.id.idx) bc_array_expand(v, r->d.id.idx + 1); 4999 if (v->len <= r->d.id.idx) bc_array_expand(v, r->d.id.idx + 1);
5084 *num = bc_vec_item(v, r->d.id.idx); 5000 *num = bc_vec_item(v, r->d.id.idx);
5085 } 5001 } else
5086 else
5087 *num = bc_vec_top(v); 5002 *num = bc_vec_top(v);
5088
5089 break; 5003 break;
5090 } 5004 }
5091
5092 case BC_RESULT_LAST: 5005 case BC_RESULT_LAST:
5093 {
5094 *num = &G.prog.last; 5006 *num = &G.prog.last;
5095 break; 5007 break;
5096 }
5097
5098 case BC_RESULT_ONE: 5008 case BC_RESULT_ONE:
5099 {
5100 *num = &G.prog.one; 5009 *num = &G.prog.one;
5101 break; 5010 break;
5102 }
5103 } 5011 }
5104 5012
5105 RETURN_STATUS(BC_STATUS_SUCCESS); 5013 RETURN_STATUS(BC_STATUS_SUCCESS);
@@ -5193,8 +5101,7 @@ static BC_STATUS zbc_program_op(char inst)
5193 bc_program_binOpRetire(&res); 5101 bc_program_binOpRetire(&res);
5194 5102
5195 RETURN_STATUS(s); 5103 RETURN_STATUS(s);
5196 5104 err:
5197err:
5198 bc_num_free(&res.d.n); 5105 bc_num_free(&res.d.n);
5199 RETURN_STATUS(s); 5106 RETURN_STATUS(s);
5200} 5107}
@@ -5244,8 +5151,7 @@ static BC_STATUS zbc_program_read(void)
5244 5151
5245 bc_vec_pushByte(&f->code, BC_INST_POP_EXEC); 5152 bc_vec_pushByte(&f->code, BC_INST_POP_EXEC);
5246 bc_vec_push(&G.prog.stack, &ip); 5153 bc_vec_push(&G.prog.stack, &ip);
5247 5154 exec_err:
5248exec_err:
5249 bc_parse_free(&parse); 5155 bc_parse_free(&parse);
5250 G.in_read = 0; 5156 G.in_read = 0;
5251 G.prog.file = sv_file; 5157 G.prog.file = sv_file;
@@ -5461,8 +5367,7 @@ static BC_STATUS zbc_num_printNum(BcNum *n, BcNum *base, size_t width, BcNumDigi
5461 s = zbc_num_mul(&frac_len, base, &frac_len, 0); 5367 s = zbc_num_mul(&frac_len, base, &frac_len, 0);
5462 if (s) goto err; 5368 if (s) goto err;
5463 } 5369 }
5464 5370 err:
5465err:
5466 bc_num_free(&frac_len); 5371 bc_num_free(&frac_len);
5467 bc_num_free(&digit); 5372 bc_num_free(&digit);
5468 bc_num_free(&fracp); 5373 bc_num_free(&fracp);
@@ -5549,8 +5454,7 @@ static BC_STATUS zbc_program_print(char inst, size_t idx)
5549 if (BC_PROG_NUM(r, num)) { 5454 if (BC_PROG_NUM(r, num)) {
5550 s = zbc_num_print(num, !pop); 5455 s = zbc_num_print(num, !pop);
5551 if (!s) bc_num_copy(&G.prog.last, num); 5456 if (!s) bc_num_copy(&G.prog.last, num);
5552 } 5457 } else {
5553 else {
5554 char *str; 5458 char *str;
5555 5459
5556 idx = (r->t == BC_RESULT_STR) ? r->d.id.idx : num->rdx; 5460 idx = (r->t == BC_RESULT_STR) ? r->d.id.idx : num->rdx;
@@ -5564,8 +5468,7 @@ static BC_STATUS zbc_program_print(char inst, size_t idx)
5564 ++G.prog.nchars; 5468 ++G.prog.nchars;
5565 if (c == '\n') G.prog.nchars = 0; 5469 if (c == '\n') G.prog.nchars = 0;
5566 } 5470 }
5567 } 5471 } else {
5568 else {
5569 bc_program_printString(str); 5472 bc_program_printString(str);
5570 if (inst == BC_INST_PRINT) bb_putchar('\n'); 5473 if (inst == BC_INST_PRINT) bb_putchar('\n');
5571 } 5474 }
@@ -5646,8 +5549,7 @@ static BC_STATUS zbc_program_logical(char inst)
5646#define zbc_program_logical(...) (zbc_program_logical(__VA_ARGS__) COMMA_SUCCESS) 5549#define zbc_program_logical(...) (zbc_program_logical(__VA_ARGS__) COMMA_SUCCESS)
5647 5550
5648#if ENABLE_DC 5551#if ENABLE_DC
5649static BC_STATUS zbc_program_assignStr(BcResult *r, BcVec *v, 5552static BC_STATUS zbc_program_assignStr(BcResult *r, BcVec *v, bool push)
5650 bool push)
5651{ 5553{
5652 BcNum n2; 5554 BcNum n2;
5653 BcResult res; 5555 BcResult res;
@@ -5704,8 +5606,7 @@ static BC_STATUS zbc_program_copyToVar(char *name, bool var)
5704 if (var) { 5606 if (var) {
5705 bc_num_init_DEF_SIZE(&r.d.n); 5607 bc_num_init_DEF_SIZE(&r.d.n);
5706 bc_num_copy(&r.d.n, n); 5608 bc_num_copy(&r.d.n, n);
5707 } 5609 } else {
5708 else {
5709 bc_array_init(&r.d.v, true); 5610 bc_array_init(&r.d.v, true);
5710 bc_array_copy(&r.d.v, (BcVec *) n); 5611 bc_array_copy(&r.d.v, (BcVec *) n);
5711 } 5612 }
@@ -5731,9 +5632,7 @@ static BC_STATUS zbc_program_assign(char inst)
5731 sc = left->t == BC_RESULT_SCALE; 5632 sc = left->t == BC_RESULT_SCALE;
5732 5633
5733#if ENABLE_DC 5634#if ENABLE_DC
5734
5735 if (right->t == BC_RESULT_STR) { 5635 if (right->t == BC_RESULT_STR) {
5736
5737 BcVec *v; 5636 BcVec *v;
5738 5637
5739 if (left->t != BC_RESULT_VAR) 5638 if (left->t != BC_RESULT_VAR)
@@ -5828,7 +5727,6 @@ static BC_STATUS bc_program_pushVar(char *code, size_t *bgn,
5828 BcNum *num = bc_vec_top(v); 5727 BcNum *num = bc_vec_top(v);
5829 5728
5830 if (pop || copy) { 5729 if (pop || copy) {
5831
5832 if (!BC_PROG_STACK(v, 2 - copy)) { 5730 if (!BC_PROG_STACK(v, 2 - copy)) {
5833 free(name); 5731 free(name);
5834 RETURN_STATUS(bc_error_stack_has_too_few_elements()); 5732 RETURN_STATUS(bc_error_stack_has_too_few_elements());
@@ -5838,13 +5736,11 @@ static BC_STATUS bc_program_pushVar(char *code, size_t *bgn,
5838 name = NULL; 5736 name = NULL;
5839 5737
5840 if (!BC_PROG_STR(num)) { 5738 if (!BC_PROG_STR(num)) {
5841
5842 r.t = BC_RESULT_TEMP; 5739 r.t = BC_RESULT_TEMP;
5843 5740
5844 bc_num_init_DEF_SIZE(&r.d.n); 5741 bc_num_init_DEF_SIZE(&r.d.n);
5845 bc_num_copy(&r.d.n, num); 5742 bc_num_copy(&r.d.n, num);
5846 } 5743 } else {
5847 else {
5848 r.t = BC_RESULT_STR; 5744 r.t = BC_RESULT_STR;
5849 r.d.id.idx = num->rdx; 5745 r.d.id.idx = num->rdx;
5850 } 5746 }
@@ -5860,8 +5756,7 @@ static BC_STATUS bc_program_pushVar(char *code, size_t *bgn,
5860} 5756}
5861#define zbc_program_pushVar(...) (bc_program_pushVar(__VA_ARGS__) COMMA_SUCCESS) 5757#define zbc_program_pushVar(...) (bc_program_pushVar(__VA_ARGS__) COMMA_SUCCESS)
5862 5758
5863static BC_STATUS zbc_program_pushArray(char *code, size_t *bgn, 5759static BC_STATUS zbc_program_pushArray(char *code, size_t *bgn, char inst)
5864 char inst)
5865{ 5760{
5866 BcStatus s = BC_STATUS_SUCCESS; 5761 BcStatus s = BC_STATUS_SUCCESS;
5867 BcResult r; 5762 BcResult r;
@@ -5872,9 +5767,7 @@ static BC_STATUS zbc_program_pushArray(char *code, size_t *bgn,
5872 if (inst == BC_INST_ARRAY) { 5767 if (inst == BC_INST_ARRAY) {
5873 r.t = BC_RESULT_ARRAY; 5768 r.t = BC_RESULT_ARRAY;
5874 bc_vec_push(&G.prog.results, &r); 5769 bc_vec_push(&G.prog.results, &r);
5875 } 5770 } else {
5876 else {
5877
5878 BcResult *operand; 5771 BcResult *operand;
5879 unsigned long temp; 5772 unsigned long temp;
5880 5773
@@ -5891,8 +5784,7 @@ static BC_STATUS zbc_program_pushArray(char *code, size_t *bgn,
5891 r.d.id.idx = (size_t) temp; 5784 r.d.id.idx = (size_t) temp;
5892 bc_program_retire(&r, BC_RESULT_ARRAY_ELEM); 5785 bc_program_retire(&r, BC_RESULT_ARRAY_ELEM);
5893 } 5786 }
5894 5787 err:
5895err:
5896 if (s) free(r.d.id.name); 5788 if (s) free(r.d.id.name);
5897 RETURN_STATUS(s); 5789 RETURN_STATUS(s);
5898} 5790}
@@ -5976,8 +5868,7 @@ static BC_STATUS zbc_program_call(char *code, size_t *idx)
5976 if (a->idx) { 5868 if (a->idx) {
5977 bc_num_init_DEF_SIZE(&param.n); 5869 bc_num_init_DEF_SIZE(&param.n);
5978 bc_vec_push(v, &param.n); 5870 bc_vec_push(v, &param.n);
5979 } 5871 } else {
5980 else {
5981 bc_array_init(&param.v, true); 5872 bc_array_init(&param.v, true);
5982 bc_vec_push(v, &param.v); 5873 bc_vec_push(v, &param.v);
5983 } 5874 }
@@ -6011,8 +5902,7 @@ static BC_STATUS zbc_program_return(char inst)
6011 if (s) RETURN_STATUS(s); 5902 if (s) RETURN_STATUS(s);
6012 bc_num_init(&res.d.n, num->len); 5903 bc_num_init(&res.d.n, num->len);
6013 bc_num_copy(&res.d.n, num); 5904 bc_num_copy(&res.d.n, num);
6014 } 5905 } else {
6015 else {
6016 bc_num_init_DEF_SIZE(&res.d.n); 5906 bc_num_init_DEF_SIZE(&res.d.n);
6017 //bc_num_zero(&res.d.n); - already is 5907 //bc_num_zero(&res.d.n); - already is
6018 } 5908 }
@@ -6075,7 +5965,8 @@ static BC_STATUS zbc_program_builtin(char inst)
6075 5965
6076 bc_num_init_DEF_SIZE(&res.d.n); 5966 bc_num_init_DEF_SIZE(&res.d.n);
6077 5967
6078 if (inst == BC_INST_SQRT) s = zbc_num_sqrt(num, &res.d.n, G.prog.scale); 5968 if (inst == BC_INST_SQRT)
5969 s = zbc_num_sqrt(num, &res.d.n, G.prog.scale);
6079#if ENABLE_BC 5970#if ENABLE_BC
6080 else if (len != 0 && opnd->t == BC_RESULT_ARRAY) { 5971 else if (len != 0 && opnd->t == BC_RESULT_ARRAY) {
6081 bc_num_ulong2num(&res.d.n, (unsigned long) ((BcVec *) num)->len); 5972 bc_num_ulong2num(&res.d.n, (unsigned long) ((BcVec *) num)->len);
@@ -6121,8 +6012,7 @@ static BC_STATUS zbc_program_divmod(void)
6121 bc_vec_push(&G.prog.results, &res); 6012 bc_vec_push(&G.prog.results, &res);
6122 6013
6123 RETURN_STATUS(s); 6014 RETURN_STATUS(s);
6124 6015 err:
6125err:
6126 bc_num_free(&res2.d.n); 6016 bc_num_free(&res2.d.n);
6127 bc_num_free(&res.d.n); 6017 bc_num_free(&res.d.n);
6128 RETURN_STATUS(s); 6018 RETURN_STATUS(s);
@@ -6148,12 +6038,10 @@ static BC_STATUS zbc_program_modexp(void)
6148 6038
6149 // Make sure that the values have their pointers updated, if necessary. 6039 // Make sure that the values have their pointers updated, if necessary.
6150 if (r1->t == BC_RESULT_VAR || r1->t == BC_RESULT_ARRAY_ELEM) { 6040 if (r1->t == BC_RESULT_VAR || r1->t == BC_RESULT_ARRAY_ELEM) {
6151
6152 if (r1->t == r2->t) { 6041 if (r1->t == r2->t) {
6153 s = zbc_program_num(r2, &n2, false); 6042 s = zbc_program_num(r2, &n2, false);
6154 if (s) RETURN_STATUS(s); 6043 if (s) RETURN_STATUS(s);
6155 } 6044 }
6156
6157 if (r1->t == r3->t) { 6045 if (r1->t == r3->t) {
6158 s = zbc_program_num(r3, &n3, false); 6046 s = zbc_program_num(r3, &n3, false);
6159 if (s) RETURN_STATUS(s); 6047 if (s) RETURN_STATUS(s);
@@ -6168,8 +6056,7 @@ static BC_STATUS zbc_program_modexp(void)
6168 bc_program_binOpRetire(&res); 6056 bc_program_binOpRetire(&res);
6169 6057
6170 RETURN_STATUS(s); 6058 RETURN_STATUS(s);
6171 6059 err:
6172err:
6173 bc_num_free(&res.d.n); 6060 bc_num_free(&res.d.n);
6174 RETURN_STATUS(s); 6061 RETURN_STATUS(s);
6175} 6062}
@@ -6205,7 +6092,6 @@ static BC_STATUS zbc_program_asciify(void)
6205 if (s) RETURN_STATUS(s); 6092 if (s) RETURN_STATUS(s);
6206 6093
6207 if (BC_PROG_NUM(r, num)) { 6094 if (BC_PROG_NUM(r, num)) {
6208
6209 bc_num_init_DEF_SIZE(&n); 6095 bc_num_init_DEF_SIZE(&n);
6210 bc_num_copy(&n, num); 6096 bc_num_copy(&n, num);
6211 bc_num_truncate(&n, n.rdx); 6097 bc_num_truncate(&n, n.rdx);
@@ -6218,8 +6104,7 @@ static BC_STATUS zbc_program_asciify(void)
6218 c = (char) val; 6104 c = (char) val;
6219 6105
6220 bc_num_free(&n); 6106 bc_num_free(&n);
6221 } 6107 } else {
6222 else {
6223 idx = (r->t == BC_RESULT_STR) ? r->d.id.idx : num->rdx; 6108 idx = (r->t == BC_RESULT_STR) ? r->d.id.idx : num->rdx;
6224 str2 = *bc_program_str(idx); 6109 str2 = *bc_program_str(idx);
6225 c = str2[0]; 6110 c = str2[0];
@@ -6239,10 +6124,8 @@ static BC_STATUS zbc_program_asciify(void)
6239 break; 6124 break;
6240 } 6125 }
6241 } 6126 }
6242
6243 free(str); 6127 free(str);
6244 } 6128 } else
6245 else
6246 bc_vec_push(&G.prog.strs, &str); 6129 bc_vec_push(&G.prog.strs, &str);
6247 6130
6248 res.t = BC_RESULT_STR; 6131 res.t = BC_RESULT_STR;
@@ -6251,8 +6134,7 @@ static BC_STATUS zbc_program_asciify(void)
6251 bc_vec_push(&G.prog.results, &res); 6134 bc_vec_push(&G.prog.results, &res);
6252 6135
6253 RETURN_STATUS(BC_STATUS_SUCCESS); 6136 RETURN_STATUS(BC_STATUS_SUCCESS);
6254 6137 num_err:
6255num_err:
6256 bc_num_free(&n); 6138 bc_num_free(&n);
6257 RETURN_STATUS(s); 6139 RETURN_STATUS(s);
6258} 6140}
@@ -6311,8 +6193,7 @@ static BC_STATUS zbc_program_nquit(void)
6311} 6193}
6312#define zbc_program_nquit(...) (zbc_program_nquit(__VA_ARGS__) COMMA_SUCCESS) 6194#define zbc_program_nquit(...) (zbc_program_nquit(__VA_ARGS__) COMMA_SUCCESS)
6313 6195
6314static BC_STATUS zbc_program_execStr(char *code, size_t *bgn, 6196static BC_STATUS zbc_program_execStr(char *code, size_t *bgn, bool cond)
6315 bool cond)
6316{ 6197{
6317 BcStatus s = BC_STATUS_SUCCESS; 6198 BcStatus s = BC_STATUS_SUCCESS;
6318 BcResult *r; 6199 BcResult *r;
@@ -6402,12 +6283,11 @@ static BC_STATUS zbc_program_execStr(char *code, size_t *bgn,
6402 bc_vec_push(&G.prog.stack, &ip); 6283 bc_vec_push(&G.prog.stack, &ip);
6403 6284
6404 RETURN_STATUS(BC_STATUS_SUCCESS); 6285 RETURN_STATUS(BC_STATUS_SUCCESS);
6405 6286 err:
6406err:
6407 bc_parse_free(&prs); 6287 bc_parse_free(&prs);
6408 f = bc_program_func(fidx); 6288 f = bc_program_func(fidx);
6409 bc_vec_pop_all(&f->code); 6289 bc_vec_pop_all(&f->code);
6410exit: 6290 exit:
6411 bc_vec_pop(&G.prog.results); 6291 bc_vec_pop(&G.prog.results);
6412 RETURN_STATUS(s); 6292 RETURN_STATUS(s);
6413} 6293}
@@ -6448,7 +6328,6 @@ static void bc_program_addFunc(char *name, size_t *idx)
6448 *idx = entry_ptr->idx; 6328 *idx = entry_ptr->idx;
6449 6329
6450 if (!inserted) { 6330 if (!inserted) {
6451
6452 BcFunc *func = bc_program_func(entry_ptr->idx); 6331 BcFunc *func = bc_program_func(entry_ptr->idx);
6453 6332
6454 // We need to reset these, so the function can be repopulated. 6333 // We need to reset these, so the function can be repopulated.
@@ -6456,8 +6335,7 @@ static void bc_program_addFunc(char *name, size_t *idx)
6456 bc_vec_pop_all(&func->autos); 6335 bc_vec_pop_all(&func->autos);
6457 bc_vec_pop_all(&func->code); 6336 bc_vec_pop_all(&func->code);
6458 bc_vec_pop_all(&func->labels); 6337 bc_vec_pop_all(&func->labels);
6459 } 6338 } else {
6460 else {
6461 bc_func_init(&f); 6339 bc_func_init(&f);
6462 bc_vec_push(&G.prog.fns, &f); 6340 bc_vec_push(&G.prog.fns, &f);
6463 } 6341 }