diff options
Diffstat (limited to 'miscutils')
-rw-r--r-- | miscutils/bc.c | 168 |
1 files changed, 84 insertions, 84 deletions
diff --git a/miscutils/bc.c b/miscutils/bc.c index ee3061621..62bdd9a44 100644 --- a/miscutils/bc.c +++ b/miscutils/bc.c | |||
@@ -354,21 +354,21 @@ typedef struct BcFunc { | |||
354 | } BcFunc; | 354 | } BcFunc; |
355 | 355 | ||
356 | typedef enum BcResultType { | 356 | typedef enum BcResultType { |
357 | BC_RESULT_TEMP, | 357 | XC_RESULT_TEMP, |
358 | 358 | ||
359 | BC_RESULT_VAR, | 359 | XC_RESULT_VAR, |
360 | BC_RESULT_ARRAY_ELEM, | 360 | XC_RESULT_ARRAY_ELEM, |
361 | BC_RESULT_ARRAY, | 361 | XC_RESULT_ARRAY, |
362 | 362 | ||
363 | BC_RESULT_STR, | 363 | XC_RESULT_STR, |
364 | 364 | ||
365 | //code uses "inst - XC_INST_IBASE + BC_RESULT_IBASE" construct, | 365 | //code uses "inst - XC_INST_IBASE + XC_RESULT_IBASE" construct, |
366 | BC_RESULT_IBASE, // relative order should match for: XC_INST_IBASE | 366 | XC_RESULT_IBASE, // relative order should match for: XC_INST_IBASE |
367 | BC_RESULT_OBASE, // relative order should match for: XC_INST_OBASE | 367 | XC_RESULT_OBASE, // relative order should match for: XC_INST_OBASE |
368 | BC_RESULT_SCALE, // relative order should match for: XC_INST_SCALE | 368 | XC_RESULT_SCALE, // relative order should match for: XC_INST_SCALE |
369 | IF_BC(BC_RESULT_LAST,) // relative order should match for: BC_INST_LAST | 369 | IF_BC(BC_RESULT_LAST,) // relative order should match for: BC_INST_LAST |
370 | BC_RESULT_CONSTANT, | 370 | XC_RESULT_CONSTANT, |
371 | BC_RESULT_ONE, | 371 | IF_BC(BC_RESULT_ONE,) |
372 | } BcResultType; | 372 | } BcResultType; |
373 | 373 | ||
374 | typedef union BcResultData { | 374 | typedef union BcResultData { |
@@ -780,7 +780,7 @@ typedef struct BcProgram { | |||
780 | 780 | ||
781 | #define BC_PROG_STR(n) (!(n)->num && !(n)->cap) | 781 | #define BC_PROG_STR(n) (!(n)->num && !(n)->cap) |
782 | #define BC_PROG_NUM(r, n) \ | 782 | #define BC_PROG_NUM(r, n) \ |
783 | ((r)->t != BC_RESULT_ARRAY && (r)->t != BC_RESULT_STR && !BC_PROG_STR(n)) | 783 | ((r)->t != XC_RESULT_ARRAY && (r)->t != XC_RESULT_STR && !BC_PROG_STR(n)) |
784 | 784 | ||
785 | #define BC_FLAG_W (1 << 0) | 785 | #define BC_FLAG_W (1 << 0) |
786 | #define BC_FLAG_V (1 << 1) | 786 | #define BC_FLAG_V (1 << 1) |
@@ -2451,22 +2451,22 @@ static void dc_result_copy(BcResult *d, BcResult *src) | |||
2451 | d->t = src->t; | 2451 | d->t = src->t; |
2452 | 2452 | ||
2453 | switch (d->t) { | 2453 | switch (d->t) { |
2454 | case BC_RESULT_TEMP: | 2454 | case XC_RESULT_TEMP: |
2455 | case BC_RESULT_IBASE: | 2455 | case XC_RESULT_IBASE: |
2456 | case BC_RESULT_SCALE: | 2456 | case XC_RESULT_SCALE: |
2457 | case BC_RESULT_OBASE: | 2457 | case XC_RESULT_OBASE: |
2458 | bc_num_init(&d->d.n, src->d.n.len); | 2458 | bc_num_init(&d->d.n, src->d.n.len); |
2459 | bc_num_copy(&d->d.n, &src->d.n); | 2459 | bc_num_copy(&d->d.n, &src->d.n); |
2460 | break; | 2460 | break; |
2461 | case BC_RESULT_VAR: | 2461 | case XC_RESULT_VAR: |
2462 | case BC_RESULT_ARRAY: | 2462 | case XC_RESULT_ARRAY: |
2463 | case BC_RESULT_ARRAY_ELEM: | 2463 | case XC_RESULT_ARRAY_ELEM: |
2464 | d->d.id.name = xstrdup(src->d.id.name); | 2464 | d->d.id.name = xstrdup(src->d.id.name); |
2465 | break; | 2465 | break; |
2466 | case BC_RESULT_CONSTANT: | 2466 | case XC_RESULT_CONSTANT: |
2467 | IF_BC(case BC_RESULT_LAST:) | 2467 | IF_BC(case BC_RESULT_LAST:) |
2468 | case BC_RESULT_ONE: | 2468 | IF_BC(case BC_RESULT_ONE:) |
2469 | case BC_RESULT_STR: | 2469 | case XC_RESULT_STR: |
2470 | memcpy(&d->d.n, &src->d.n, sizeof(BcNum)); | 2470 | memcpy(&d->d.n, &src->d.n, sizeof(BcNum)); |
2471 | break; | 2471 | break; |
2472 | } | 2472 | } |
@@ -2478,15 +2478,15 @@ static FAST_FUNC void bc_result_free(void *result) | |||
2478 | BcResult *r = (BcResult *) result; | 2478 | BcResult *r = (BcResult *) result; |
2479 | 2479 | ||
2480 | switch (r->t) { | 2480 | switch (r->t) { |
2481 | case BC_RESULT_TEMP: | 2481 | case XC_RESULT_TEMP: |
2482 | case BC_RESULT_IBASE: | 2482 | case XC_RESULT_IBASE: |
2483 | case BC_RESULT_SCALE: | 2483 | case XC_RESULT_SCALE: |
2484 | case BC_RESULT_OBASE: | 2484 | case XC_RESULT_OBASE: |
2485 | bc_num_free(&r->d.n); | 2485 | bc_num_free(&r->d.n); |
2486 | break; | 2486 | break; |
2487 | case BC_RESULT_VAR: | 2487 | case XC_RESULT_VAR: |
2488 | case BC_RESULT_ARRAY: | 2488 | case XC_RESULT_ARRAY: |
2489 | case BC_RESULT_ARRAY_ELEM: | 2489 | case XC_RESULT_ARRAY_ELEM: |
2490 | free(r->d.id.name); | 2490 | free(r->d.id.name); |
2491 | break; | 2491 | break; |
2492 | default: | 2492 | default: |
@@ -5086,14 +5086,14 @@ static BcVec* bc_program_search(char *id, bool var) | |||
5086 | static BC_STATUS zbc_program_num(BcResult *r, BcNum **num, bool hex) | 5086 | static BC_STATUS zbc_program_num(BcResult *r, BcNum **num, bool hex) |
5087 | { | 5087 | { |
5088 | switch (r->t) { | 5088 | switch (r->t) { |
5089 | case BC_RESULT_STR: | 5089 | case XC_RESULT_STR: |
5090 | case BC_RESULT_TEMP: | 5090 | case XC_RESULT_TEMP: |
5091 | case BC_RESULT_IBASE: | 5091 | case XC_RESULT_IBASE: |
5092 | case BC_RESULT_SCALE: | 5092 | case XC_RESULT_SCALE: |
5093 | case BC_RESULT_OBASE: | 5093 | case XC_RESULT_OBASE: |
5094 | *num = &r->d.n; | 5094 | *num = &r->d.n; |
5095 | break; | 5095 | break; |
5096 | case BC_RESULT_CONSTANT: { | 5096 | case XC_RESULT_CONSTANT: { |
5097 | BcStatus s; | 5097 | BcStatus s; |
5098 | char *str; | 5098 | char *str; |
5099 | unsigned base_t; | 5099 | unsigned base_t; |
@@ -5112,17 +5112,17 @@ static BC_STATUS zbc_program_num(BcResult *r, BcNum **num, bool hex) | |||
5112 | RETURN_STATUS(s); | 5112 | RETURN_STATUS(s); |
5113 | } | 5113 | } |
5114 | *num = &r->d.n; | 5114 | *num = &r->d.n; |
5115 | r->t = BC_RESULT_TEMP; | 5115 | r->t = XC_RESULT_TEMP; |
5116 | break; | 5116 | break; |
5117 | } | 5117 | } |
5118 | case BC_RESULT_VAR: | 5118 | case XC_RESULT_VAR: |
5119 | case BC_RESULT_ARRAY: | 5119 | case XC_RESULT_ARRAY: |
5120 | case BC_RESULT_ARRAY_ELEM: { | 5120 | case XC_RESULT_ARRAY_ELEM: { |
5121 | BcVec *v; | 5121 | BcVec *v; |
5122 | 5122 | ||
5123 | v = bc_program_search(r->d.id.name, r->t == BC_RESULT_VAR); | 5123 | v = bc_program_search(r->d.id.name, r->t == XC_RESULT_VAR); |
5124 | 5124 | ||
5125 | if (r->t == BC_RESULT_ARRAY_ELEM) { | 5125 | if (r->t == XC_RESULT_ARRAY_ELEM) { |
5126 | v = bc_vec_top(v); | 5126 | v = bc_vec_top(v); |
5127 | if (v->len <= r->d.id.idx) bc_array_expand(v, r->d.id.idx + 1); | 5127 | if (v->len <= r->d.id.idx) bc_array_expand(v, r->d.id.idx + 1); |
5128 | *num = bc_vec_item(v, r->d.id.idx); | 5128 | *num = bc_vec_item(v, r->d.id.idx); |
@@ -5164,7 +5164,7 @@ static BC_STATUS zbc_program_binOpPrep(BcResult **l, BcNum **ln, | |||
5164 | 5164 | ||
5165 | lt = (*l)->t; | 5165 | lt = (*l)->t; |
5166 | rt = (*r)->t; | 5166 | rt = (*r)->t; |
5167 | hex = assign && (lt == BC_RESULT_IBASE || lt == BC_RESULT_OBASE); | 5167 | hex = assign && (lt == XC_RESULT_IBASE || lt == XC_RESULT_OBASE); |
5168 | 5168 | ||
5169 | s = zbc_program_num(*l, ln, false); | 5169 | s = zbc_program_num(*l, ln, false); |
5170 | if (s) RETURN_STATUS(s); | 5170 | if (s) RETURN_STATUS(s); |
@@ -5173,12 +5173,12 @@ static BC_STATUS zbc_program_binOpPrep(BcResult **l, BcNum **ln, | |||
5173 | 5173 | ||
5174 | // We run this again under these conditions in case any vector has been | 5174 | // We run this again under these conditions in case any vector has been |
5175 | // reallocated out from under the BcNums or arrays we had. | 5175 | // reallocated out from under the BcNums or arrays we had. |
5176 | if (lt == rt && (lt == BC_RESULT_VAR || lt == BC_RESULT_ARRAY_ELEM)) { | 5176 | if (lt == rt && (lt == XC_RESULT_VAR || lt == XC_RESULT_ARRAY_ELEM)) { |
5177 | s = zbc_program_num(*l, ln, false); | 5177 | s = zbc_program_num(*l, ln, false); |
5178 | if (s) RETURN_STATUS(s); | 5178 | if (s) RETURN_STATUS(s); |
5179 | } | 5179 | } |
5180 | 5180 | ||
5181 | if (!BC_PROG_NUM((*l), (*ln)) && (!assign || (*l)->t != BC_RESULT_VAR)) | 5181 | if (!BC_PROG_NUM((*l), (*ln)) && (!assign || (*l)->t != XC_RESULT_VAR)) |
5182 | RETURN_STATUS(bc_error_variable_is_wrong_type()); | 5182 | RETURN_STATUS(bc_error_variable_is_wrong_type()); |
5183 | if (!assign && !BC_PROG_NUM((*r), (*ln))) | 5183 | if (!assign && !BC_PROG_NUM((*r), (*ln))) |
5184 | RETURN_STATUS(bc_error_variable_is_wrong_type()); | 5184 | RETURN_STATUS(bc_error_variable_is_wrong_type()); |
@@ -5189,7 +5189,7 @@ static BC_STATUS zbc_program_binOpPrep(BcResult **l, BcNum **ln, | |||
5189 | 5189 | ||
5190 | static void bc_program_binOpRetire(BcResult *r) | 5190 | static void bc_program_binOpRetire(BcResult *r) |
5191 | { | 5191 | { |
5192 | r->t = BC_RESULT_TEMP; | 5192 | r->t = XC_RESULT_TEMP; |
5193 | bc_vec_pop(&G.prog.results); | 5193 | bc_vec_pop(&G.prog.results); |
5194 | bc_result_pop_and_push(r); | 5194 | bc_result_pop_and_push(r); |
5195 | } | 5195 | } |
@@ -5599,7 +5599,7 @@ static BC_STATUS zbc_program_print(char inst, size_t idx) | |||
5599 | } else { | 5599 | } else { |
5600 | char *str; | 5600 | char *str; |
5601 | 5601 | ||
5602 | idx = (r->t == BC_RESULT_STR) ? r->d.id.idx : num->rdx; | 5602 | idx = (r->t == XC_RESULT_STR) ? r->d.id.idx : num->rdx; |
5603 | str = *bc_program_str(idx); | 5603 | str = *bc_program_str(idx); |
5604 | 5604 | ||
5605 | if (inst == XC_INST_PRINT_STR) { | 5605 | if (inst == XC_INST_PRINT_STR) { |
@@ -5635,7 +5635,7 @@ static BC_STATUS zbc_program_negate(void) | |||
5635 | bc_num_copy(&res.d.n, num); | 5635 | bc_num_copy(&res.d.n, num); |
5636 | if (res.d.n.len) res.d.n.neg = !res.d.n.neg; | 5636 | if (res.d.n.len) res.d.n.neg = !res.d.n.neg; |
5637 | 5637 | ||
5638 | bc_program_retire(&res, BC_RESULT_TEMP); | 5638 | bc_program_retire(&res, XC_RESULT_TEMP); |
5639 | 5639 | ||
5640 | RETURN_STATUS(s); | 5640 | RETURN_STATUS(s); |
5641 | } | 5641 | } |
@@ -5698,7 +5698,7 @@ static BC_STATUS zdc_program_assignStr(BcResult *r, BcVec *v, bool push) | |||
5698 | 5698 | ||
5699 | memset(&n2, 0, sizeof(BcNum)); | 5699 | memset(&n2, 0, sizeof(BcNum)); |
5700 | n2.rdx = res.d.id.idx = r->d.id.idx; | 5700 | n2.rdx = res.d.id.idx = r->d.id.idx; |
5701 | res.t = BC_RESULT_STR; | 5701 | res.t = XC_RESULT_STR; |
5702 | 5702 | ||
5703 | if (!push) { | 5703 | if (!push) { |
5704 | if (!STACK_HAS_MORE_THAN(&G.prog.results, 1)) | 5704 | if (!STACK_HAS_MORE_THAN(&G.prog.results, 1)) |
@@ -5726,14 +5726,14 @@ static BC_STATUS zbc_program_copyToVar(char *name, bool var) | |||
5726 | RETURN_STATUS(bc_error_stack_has_too_few_elements()); | 5726 | RETURN_STATUS(bc_error_stack_has_too_few_elements()); |
5727 | 5727 | ||
5728 | ptr = bc_vec_top(&G.prog.results); | 5728 | ptr = bc_vec_top(&G.prog.results); |
5729 | if ((ptr->t == BC_RESULT_ARRAY) != !var) | 5729 | if ((ptr->t == XC_RESULT_ARRAY) != !var) |
5730 | RETURN_STATUS(bc_error_variable_is_wrong_type()); | 5730 | RETURN_STATUS(bc_error_variable_is_wrong_type()); |
5731 | v = bc_program_search(name, var); | 5731 | v = bc_program_search(name, var); |
5732 | 5732 | ||
5733 | #if ENABLE_DC | 5733 | #if ENABLE_DC |
5734 | if (ptr->t == BC_RESULT_STR && !var) | 5734 | if (ptr->t == XC_RESULT_STR && !var) |
5735 | RETURN_STATUS(bc_error_variable_is_wrong_type()); | 5735 | RETURN_STATUS(bc_error_variable_is_wrong_type()); |
5736 | if (ptr->t == BC_RESULT_STR) | 5736 | if (ptr->t == XC_RESULT_STR) |
5737 | RETURN_STATUS(zdc_program_assignStr(ptr, v, true)); | 5737 | RETURN_STATUS(zdc_program_assignStr(ptr, v, true)); |
5738 | #endif | 5738 | #endif |
5739 | 5739 | ||
@@ -5769,14 +5769,14 @@ static BC_STATUS zbc_program_assign(char inst) | |||
5769 | s = zbc_program_binOpPrep(&left, &l, &right, &r, assign); | 5769 | s = zbc_program_binOpPrep(&left, &l, &right, &r, assign); |
5770 | if (s) RETURN_STATUS(s); | 5770 | if (s) RETURN_STATUS(s); |
5771 | 5771 | ||
5772 | ib = left->t == BC_RESULT_IBASE; | 5772 | ib = left->t == XC_RESULT_IBASE; |
5773 | sc = left->t == BC_RESULT_SCALE; | 5773 | sc = left->t == XC_RESULT_SCALE; |
5774 | 5774 | ||
5775 | #if ENABLE_DC | 5775 | #if ENABLE_DC |
5776 | if (right->t == BC_RESULT_STR) { | 5776 | if (right->t == XC_RESULT_STR) { |
5777 | BcVec *v; | 5777 | BcVec *v; |
5778 | 5778 | ||
5779 | if (left->t != BC_RESULT_VAR) | 5779 | if (left->t != XC_RESULT_VAR) |
5780 | RETURN_STATUS(bc_error_variable_is_wrong_type()); | 5780 | RETURN_STATUS(bc_error_variable_is_wrong_type()); |
5781 | v = bc_program_search(left->d.id.name, true); | 5781 | v = bc_program_search(left->d.id.name, true); |
5782 | 5782 | ||
@@ -5784,7 +5784,7 @@ static BC_STATUS zbc_program_assign(char inst) | |||
5784 | } | 5784 | } |
5785 | #endif | 5785 | #endif |
5786 | 5786 | ||
5787 | if (left->t == BC_RESULT_CONSTANT || left->t == BC_RESULT_TEMP) | 5787 | if (left->t == XC_RESULT_CONSTANT || left->t == XC_RESULT_TEMP) |
5788 | RETURN_STATUS(bc_error("bad assignment:" | 5788 | RETURN_STATUS(bc_error("bad assignment:" |
5789 | " left side must be variable" | 5789 | " left side must be variable" |
5790 | " or array element" | 5790 | " or array element" |
@@ -5805,11 +5805,11 @@ static BC_STATUS zbc_program_assign(char inst) | |||
5805 | bc_num_copy(l, r); | 5805 | bc_num_copy(l, r); |
5806 | #endif | 5806 | #endif |
5807 | 5807 | ||
5808 | if (ib || sc || left->t == BC_RESULT_OBASE) { | 5808 | if (ib || sc || left->t == XC_RESULT_OBASE) { |
5809 | static const char *const msg[] = { | 5809 | static const char *const msg[] = { |
5810 | "bad ibase; must be [2,16]", //BC_RESULT_IBASE | 5810 | "bad ibase; must be [2,16]", //XC_RESULT_IBASE |
5811 | "bad obase; must be [2,"BC_MAX_OBASE_STR"]", //BC_RESULT_OBASE | 5811 | "bad obase; must be [2,"BC_MAX_OBASE_STR"]", //XC_RESULT_OBASE |
5812 | "bad scale; must be [0,"BC_MAX_SCALE_STR"]", //BC_RESULT_SCALE | 5812 | "bad scale; must be [0,"BC_MAX_SCALE_STR"]", //XC_RESULT_SCALE |
5813 | }; | 5813 | }; |
5814 | size_t *ptr; | 5814 | size_t *ptr; |
5815 | size_t max; | 5815 | size_t max; |
@@ -5817,7 +5817,7 @@ static BC_STATUS zbc_program_assign(char inst) | |||
5817 | 5817 | ||
5818 | s = zbc_num_ulong(l, &val); | 5818 | s = zbc_num_ulong(l, &val); |
5819 | if (s) RETURN_STATUS(s); | 5819 | if (s) RETURN_STATUS(s); |
5820 | s = left->t - BC_RESULT_IBASE; | 5820 | s = left->t - XC_RESULT_IBASE; |
5821 | if (sc) { | 5821 | if (sc) { |
5822 | max = BC_MAX_SCALE; | 5822 | max = BC_MAX_SCALE; |
5823 | ptr = &G.prog.scale; | 5823 | ptr = &G.prog.scale; |
@@ -5854,7 +5854,7 @@ static BC_STATUS bc_program_pushVar(char *code, size_t *bgn, | |||
5854 | BcResult r; | 5854 | BcResult r; |
5855 | char *name = bc_program_name(code, bgn); | 5855 | char *name = bc_program_name(code, bgn); |
5856 | 5856 | ||
5857 | r.t = BC_RESULT_VAR; | 5857 | r.t = XC_RESULT_VAR; |
5858 | r.d.id.name = name; | 5858 | r.d.id.name = name; |
5859 | 5859 | ||
5860 | #if ENABLE_DC | 5860 | #if ENABLE_DC |
@@ -5868,11 +5868,11 @@ static BC_STATUS bc_program_pushVar(char *code, size_t *bgn, | |||
5868 | } | 5868 | } |
5869 | 5869 | ||
5870 | if (!BC_PROG_STR(num)) { | 5870 | if (!BC_PROG_STR(num)) { |
5871 | r.t = BC_RESULT_TEMP; | 5871 | r.t = XC_RESULT_TEMP; |
5872 | bc_num_init_DEF_SIZE(&r.d.n); | 5872 | bc_num_init_DEF_SIZE(&r.d.n); |
5873 | bc_num_copy(&r.d.n, num); | 5873 | bc_num_copy(&r.d.n, num); |
5874 | } else { | 5874 | } else { |
5875 | r.t = BC_RESULT_STR; | 5875 | r.t = XC_RESULT_STR; |
5876 | r.d.id.idx = num->rdx; | 5876 | r.d.id.idx = num->rdx; |
5877 | } | 5877 | } |
5878 | 5878 | ||
@@ -5895,7 +5895,7 @@ static BC_STATUS zbc_program_pushArray(char *code, size_t *bgn, char inst) | |||
5895 | r.d.id.name = bc_program_name(code, bgn); | 5895 | r.d.id.name = bc_program_name(code, bgn); |
5896 | 5896 | ||
5897 | if (inst == XC_INST_ARRAY) { | 5897 | if (inst == XC_INST_ARRAY) { |
5898 | r.t = BC_RESULT_ARRAY; | 5898 | r.t = XC_RESULT_ARRAY; |
5899 | bc_vec_push(&G.prog.results, &r); | 5899 | bc_vec_push(&G.prog.results, &r); |
5900 | } else { | 5900 | } else { |
5901 | BcResult *operand; | 5901 | BcResult *operand; |
@@ -5912,7 +5912,7 @@ static BC_STATUS zbc_program_pushArray(char *code, size_t *bgn, char inst) | |||
5912 | } | 5912 | } |
5913 | 5913 | ||
5914 | r.d.id.idx = (size_t) temp; | 5914 | r.d.id.idx = (size_t) temp; |
5915 | bc_program_retire(&r, BC_RESULT_ARRAY_ELEM); | 5915 | bc_program_retire(&r, XC_RESULT_ARRAY_ELEM); |
5916 | } | 5916 | } |
5917 | err: | 5917 | err: |
5918 | if (s) free(r.d.id.name); | 5918 | if (s) free(r.d.id.name); |
@@ -5932,7 +5932,7 @@ static BC_STATUS zbc_program_incdec(char inst) | |||
5932 | if (s) RETURN_STATUS(s); | 5932 | if (s) RETURN_STATUS(s); |
5933 | 5933 | ||
5934 | if (inst == BC_INST_INC_POST || inst == BC_INST_DEC_POST) { | 5934 | if (inst == BC_INST_INC_POST || inst == BC_INST_DEC_POST) { |
5935 | copy.t = BC_RESULT_TEMP; | 5935 | copy.t = XC_RESULT_TEMP; |
5936 | bc_num_init(©.d.n, num->len); | 5936 | bc_num_init(©.d.n, num->len); |
5937 | bc_num_copy(©.d.n, num); | 5937 | bc_num_copy(©.d.n, num); |
5938 | } | 5938 | } |
@@ -5981,7 +5981,7 @@ static BC_STATUS zbc_program_call(char *code, size_t *idx) | |||
5981 | a = bc_vec_item(&func->autos, nparams - 1 - i); | 5981 | a = bc_vec_item(&func->autos, nparams - 1 - i); |
5982 | arg = bc_vec_top(&G.prog.results); | 5982 | arg = bc_vec_top(&G.prog.results); |
5983 | 5983 | ||
5984 | if ((!a->idx) != (arg->t == BC_RESULT_ARRAY) || arg->t == BC_RESULT_STR) | 5984 | if ((!a->idx) != (arg->t == XC_RESULT_ARRAY) || arg->t == XC_RESULT_STR) |
5985 | RETURN_STATUS(bc_error_variable_is_wrong_type()); | 5985 | RETURN_STATUS(bc_error_variable_is_wrong_type()); |
5986 | 5986 | ||
5987 | s = zbc_program_copyToVar(a->name, a->idx); | 5987 | s = zbc_program_copyToVar(a->name, a->idx); |
@@ -6022,7 +6022,7 @@ static BC_STATUS zbc_program_return(char inst) | |||
6022 | RETURN_STATUS(bc_error_stack_has_too_few_elements()); | 6022 | RETURN_STATUS(bc_error_stack_has_too_few_elements()); |
6023 | 6023 | ||
6024 | f = bc_program_func(ip->func); | 6024 | f = bc_program_func(ip->func); |
6025 | res.t = BC_RESULT_TEMP; | 6025 | res.t = XC_RESULT_TEMP; |
6026 | 6026 | ||
6027 | if (inst == XC_INST_RET) { | 6027 | if (inst == XC_INST_RET) { |
6028 | BcStatus s; | 6028 | BcStatus s; |
@@ -6098,14 +6098,14 @@ static BC_STATUS zbc_program_builtin(char inst) | |||
6098 | if (inst == XC_INST_SQRT) | 6098 | if (inst == XC_INST_SQRT) |
6099 | s = zbc_num_sqrt(num, &res.d.n, G.prog.scale); | 6099 | s = zbc_num_sqrt(num, &res.d.n, G.prog.scale); |
6100 | #if ENABLE_BC | 6100 | #if ENABLE_BC |
6101 | else if (len != 0 && opnd->t == BC_RESULT_ARRAY) { | 6101 | else if (len != 0 && opnd->t == XC_RESULT_ARRAY) { |
6102 | bc_num_ulong2num(&res.d.n, (unsigned long) ((BcVec *) num)->len); | 6102 | bc_num_ulong2num(&res.d.n, (unsigned long) ((BcVec *) num)->len); |
6103 | } | 6103 | } |
6104 | #endif | 6104 | #endif |
6105 | #if ENABLE_DC | 6105 | #if ENABLE_DC |
6106 | else if (len != 0 && !BC_PROG_NUM(opnd, num)) { | 6106 | else if (len != 0 && !BC_PROG_NUM(opnd, num)) { |
6107 | char **str; | 6107 | char **str; |
6108 | size_t idx = opnd->t == BC_RESULT_STR ? opnd->d.id.idx : num->rdx; | 6108 | size_t idx = opnd->t == XC_RESULT_STR ? opnd->d.id.idx : num->rdx; |
6109 | 6109 | ||
6110 | str = bc_program_str(idx); | 6110 | str = bc_program_str(idx); |
6111 | bc_num_ulong2num(&res.d.n, strlen(*str)); | 6111 | bc_num_ulong2num(&res.d.n, strlen(*str)); |
@@ -6115,7 +6115,7 @@ static BC_STATUS zbc_program_builtin(char inst) | |||
6115 | bc_num_ulong2num(&res.d.n, len ? bc_program_len(num) : bc_program_scale(num)); | 6115 | bc_num_ulong2num(&res.d.n, len ? bc_program_len(num) : bc_program_scale(num)); |
6116 | } | 6116 | } |
6117 | 6117 | ||
6118 | bc_program_retire(&res, BC_RESULT_TEMP); | 6118 | bc_program_retire(&res, XC_RESULT_TEMP); |
6119 | 6119 | ||
6120 | RETURN_STATUS(s); | 6120 | RETURN_STATUS(s); |
6121 | } | 6121 | } |
@@ -6138,7 +6138,7 @@ static BC_STATUS zdc_program_divmod(void) | |||
6138 | if (s) goto err; | 6138 | if (s) goto err; |
6139 | 6139 | ||
6140 | bc_program_binOpRetire(&res2); | 6140 | bc_program_binOpRetire(&res2); |
6141 | res.t = BC_RESULT_TEMP; | 6141 | res.t = XC_RESULT_TEMP; |
6142 | bc_vec_push(&G.prog.results, &res); | 6142 | bc_vec_push(&G.prog.results, &res); |
6143 | 6143 | ||
6144 | RETURN_STATUS(s); | 6144 | RETURN_STATUS(s); |
@@ -6167,7 +6167,7 @@ static BC_STATUS zdc_program_modexp(void) | |||
6167 | RETURN_STATUS(bc_error_variable_is_wrong_type()); | 6167 | RETURN_STATUS(bc_error_variable_is_wrong_type()); |
6168 | 6168 | ||
6169 | // Make sure that the values have their pointers updated, if necessary. | 6169 | // Make sure that the values have their pointers updated, if necessary. |
6170 | if (r1->t == BC_RESULT_VAR || r1->t == BC_RESULT_ARRAY_ELEM) { | 6170 | if (r1->t == XC_RESULT_VAR || r1->t == XC_RESULT_ARRAY_ELEM) { |
6171 | if (r1->t == r2->t) { | 6171 | if (r1->t == r2->t) { |
6172 | s = zbc_program_num(r2, &n2, false); | 6172 | s = zbc_program_num(r2, &n2, false); |
6173 | if (s) RETURN_STATUS(s); | 6173 | if (s) RETURN_STATUS(s); |
@@ -6197,7 +6197,7 @@ static void dc_program_stackLen(void) | |||
6197 | BcResult res; | 6197 | BcResult res; |
6198 | size_t len = G.prog.results.len; | 6198 | size_t len = G.prog.results.len; |
6199 | 6199 | ||
6200 | res.t = BC_RESULT_TEMP; | 6200 | res.t = XC_RESULT_TEMP; |
6201 | 6201 | ||
6202 | bc_num_init_DEF_SIZE(&res.d.n); | 6202 | bc_num_init_DEF_SIZE(&res.d.n); |
6203 | bc_num_ulong2num(&res.d.n, len); | 6203 | bc_num_ulong2num(&res.d.n, len); |
@@ -6244,7 +6244,7 @@ static BC_STATUS zdc_program_asciify(void) | |||
6244 | bc_num_free(&n); | 6244 | bc_num_free(&n); |
6245 | } else { | 6245 | } else { |
6246 | char *sp; | 6246 | char *sp; |
6247 | idx = (r->t == BC_RESULT_STR) ? r->d.id.idx : num->rdx; | 6247 | idx = (r->t == XC_RESULT_STR) ? r->d.id.idx : num->rdx; |
6248 | sp = *bc_program_str(idx); | 6248 | sp = *bc_program_str(idx); |
6249 | c = sp[0]; | 6249 | c = sp[0]; |
6250 | } | 6250 | } |
@@ -6260,7 +6260,7 @@ static BC_STATUS zdc_program_asciify(void) | |||
6260 | //str[1] = '\0'; - already is | 6260 | //str[1] = '\0'; - already is |
6261 | bc_vec_push(&G.prog.strs, &str); | 6261 | bc_vec_push(&G.prog.strs, &str); |
6262 | dup: | 6262 | dup: |
6263 | res.t = BC_RESULT_STR; | 6263 | res.t = XC_RESULT_STR; |
6264 | res.d.id.idx = idx; | 6264 | res.d.id.idx = idx; |
6265 | bc_result_pop_and_push(&res); | 6265 | bc_result_pop_and_push(&res); |
6266 | 6266 | ||
@@ -6289,7 +6289,7 @@ static BC_STATUS zdc_program_printStream(void) | |||
6289 | s = zbc_num_printNum(n, 0x100, 1, dc_num_printChar); | 6289 | s = zbc_num_printNum(n, 0x100, 1, dc_num_printChar); |
6290 | } else { | 6290 | } else { |
6291 | char *str; | 6291 | char *str; |
6292 | idx = (r->t == BC_RESULT_STR) ? r->d.id.idx : n->rdx; | 6292 | idx = (r->t == XC_RESULT_STR) ? r->d.id.idx : n->rdx; |
6293 | str = *bc_program_str(idx); | 6293 | str = *bc_program_str(idx); |
6294 | fputs(str, stdout); | 6294 | fputs(str, stdout); |
6295 | } | 6295 | } |
@@ -6373,9 +6373,9 @@ static BC_STATUS zdc_program_execStr(char *code, size_t *bgn, bool cond) | |||
6373 | 6373 | ||
6374 | sidx = n->rdx; | 6374 | sidx = n->rdx; |
6375 | } else { | 6375 | } else { |
6376 | if (r->t == BC_RESULT_STR) { | 6376 | if (r->t == XC_RESULT_STR) { |
6377 | sidx = r->d.id.idx; | 6377 | sidx = r->d.id.idx; |
6378 | } else if (r->t == BC_RESULT_VAR) { | 6378 | } else if (r->t == XC_RESULT_VAR) { |
6379 | BcNum *n; | 6379 | BcNum *n; |
6380 | s = zbc_program_num(r, &n, false); | 6380 | s = zbc_program_num(r, &n, false); |
6381 | if (s || !BC_PROG_STR(n)) goto exit; | 6381 | if (s || !BC_PROG_STR(n)) goto exit; |
@@ -6434,7 +6434,7 @@ static void bc_program_pushGlobal(char inst) | |||
6434 | BcResult res; | 6434 | BcResult res; |
6435 | unsigned long val; | 6435 | unsigned long val; |
6436 | 6436 | ||
6437 | res.t = inst - XC_INST_IBASE + BC_RESULT_IBASE; | 6437 | res.t = inst - XC_INST_IBASE + XC_RESULT_IBASE; |
6438 | if (inst == XC_INST_IBASE) | 6438 | if (inst == XC_INST_IBASE) |
6439 | val = (unsigned long) G.prog.ib_t; | 6439 | val = (unsigned long) G.prog.ib_t; |
6440 | else if (inst == XC_INST_SCALE) | 6440 | else if (inst == XC_INST_SCALE) |
@@ -6550,7 +6550,7 @@ static BC_STATUS zbc_program_exec(void) | |||
6550 | break; | 6550 | break; |
6551 | case XC_INST_NUM: | 6551 | case XC_INST_NUM: |
6552 | dbg_exec("XC_INST_NUM:"); | 6552 | dbg_exec("XC_INST_NUM:"); |
6553 | r.t = BC_RESULT_CONSTANT; | 6553 | r.t = XC_RESULT_CONSTANT; |
6554 | r.d.id.idx = bc_program_index(code, &ip->inst_idx); | 6554 | r.d.id.idx = bc_program_index(code, &ip->inst_idx); |
6555 | bc_vec_push(&G.prog.results, &r); | 6555 | bc_vec_push(&G.prog.results, &r); |
6556 | break; | 6556 | break; |
@@ -6569,7 +6569,7 @@ static BC_STATUS zbc_program_exec(void) | |||
6569 | break; | 6569 | break; |
6570 | case XC_INST_STR: | 6570 | case XC_INST_STR: |
6571 | dbg_exec("XC_INST_STR:"); | 6571 | dbg_exec("XC_INST_STR:"); |
6572 | r.t = BC_RESULT_STR; | 6572 | r.t = XC_RESULT_STR; |
6573 | r.d.id.idx = bc_program_index(code, &ip->inst_idx); | 6573 | r.d.id.idx = bc_program_index(code, &ip->inst_idx); |
6574 | bc_vec_push(&G.prog.results, &r); | 6574 | bc_vec_push(&G.prog.results, &r); |
6575 | break; | 6575 | break; |
@@ -6591,7 +6591,7 @@ static BC_STATUS zbc_program_exec(void) | |||
6591 | if (bc_num_cmp(num, &G.prog.zero) == 0) | 6591 | if (bc_num_cmp(num, &G.prog.zero) == 0) |
6592 | bc_num_one(&r.d.n); | 6592 | bc_num_one(&r.d.n); |
6593 | //else bc_num_zero(&r.d.n); - already is | 6593 | //else bc_num_zero(&r.d.n); - already is |
6594 | bc_program_retire(&r, BC_RESULT_TEMP); | 6594 | bc_program_retire(&r, XC_RESULT_TEMP); |
6595 | break; | 6595 | break; |
6596 | } | 6596 | } |
6597 | case XC_INST_NEG: | 6597 | case XC_INST_NEG: |