aboutsummaryrefslogtreecommitdiff
path: root/miscutils/bc.c
AgeCommit message (Collapse)Author
2018-12-25bc: make it clear that the code is adaptedGavin Howard
Signed-off-by: Gavin Howard <yzena.tech@gmail.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-25bc: stop passing a pointer to G.prs down the call chainDenys Vlasenko
function old new delta rewrite_label_to_current 19 26 +7 bc_lex_assign 28 35 +7 zbc_lex_skip_if_at_NLINE 14 19 +5 bc_parse_push 11 16 +5 bc_parse_operator 147 152 +5 bc_parse_create 92 97 +5 bc_lex_whitespace 38 43 +5 bc_lex_name 66 71 +5 bc_lex_lineComment 33 38 +5 zbc_lex_number 174 178 +4 zbc_parse_text_init 53 56 +3 zdc_parse_register 43 45 +2 zdc_parse_exprs_until_eof 26 28 +2 bc_parse_free 38 40 +2 bc_lex_file 28 27 -1 zbc_parse_pushSTR 65 63 -2 bc_parse_expr_empty_ok 1778 1776 -2 zbc_vm_execute_FILE 55 52 -3 bc_vm_init 678 675 -3 zbc_parse_stmt_allow_NLINE_before 59 55 -4 bc_parse_pushNUM 80 74 -6 bc_parse_pushJUMP_ZERO 27 21 -6 bc_parse_pushJUMP 27 21 -6 bc_vm_run 112 104 -8 bc_parse_pushName 39 31 -8 bc_parse_pushIndex 60 52 -8 zbc_parse_name 468 453 -15 zdc_program_execStr 524 501 -23 zdc_parse_mem 93 70 -23 zbc_program_exec 4003 3967 -36 zdc_parse_expr 518 476 -42 zbc_vm_process 923 878 -45 zbc_lex_next 2158 2070 -88 zbc_parse_stmt_possibly_auto 1560 1451 -109 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 14/20 up/down: 62/-438) Total: -376 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-25bc: make zbc_program_read() and zdc_program_execStr() use G.prsDenys Vlasenko
function old new delta zbc_program_print 656 683 +27 zbc_program_exec 3976 4003 +27 zdc_program_execStr 512 524 +12 bc_num_printNewline 45 54 +9 bc_num_printHex 61 67 +6 bc_num_printDigits 131 137 +6 dc_num_printChar 21 24 +3 bc_vm_init 675 678 +3 zbc_program_assign 424 426 +2 bc_read_line 410 407 -3 bc_verror_msg 99 93 -6 zbc_lex_next 2167 2158 -9 zbc_vm_execute_FILE 67 55 -12 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 9/4 up/down: 95/-30) Total: 65 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-25bc: fix interactive read()Denys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-25bc: add code to detect errors like "print 1 print 2"Denys Vlasenko
function old new delta zbc_vm_process 831 925 +94 zbc_program_exec 3964 3976 +12 zdc_program_execStr 506 512 +6 zbc_lex_next 2161 2167 +6 zbc_program_assign 419 424 +5 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 5/0 up/down: 123/0) Total: 123 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-25bc: allow {break} and {continue} (allow RBRACE to terminate them)Denys Vlasenko
function old new delta zbc_parse_stmt_possibly_auto 1599 1560 -39 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-25bc: shrink parsing code a bit more, disallow "auto a b c" (without commas)Denys Vlasenko
function old new delta bc_parse_expr_empty_ok 1791 1785 -6 zbc_parse_stmt_possibly_auto 1675 1599 -76 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-82) Total: -82 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-25bc: simplify bc_parse_expr_empty_ok()Denys Vlasenko
function old new delta bc_parse_expr_empty_ok 1810 1791 -19 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-25bc: simplify bc_parse_expr_empty_ok()Denys Vlasenko
function old new delta bc_parse_expr_empty_ok 1819 1810 -9 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-25bc: simplify bc_parse_expr_empty_ok()Denys Vlasenko
function old new delta bc_parse_expr_empty_ok 1846 1819 -27 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-24bc: BC_RESULT_ONE is bc-specificDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-24bc: partially deinline BC_PARSE_LEAF() macroDenys Vlasenko
function old new delta ok_in_expr - 30 +30 bc_parse_expr_empty_ok 1972 1846 -126 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 0/1 up/down: 30/-126) Total: -96 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-24bc: rename lexer variables, use smallints where appropriateDenys Vlasenko
function old new delta bc_parse_expr_empty_ok 1966 1972 +6 zdc_parse_expr 514 518 +4 zbc_lex_number 177 174 -3 dc_num_printChar 24 21 -3 bc_lex_whitespace 41 38 -3 bc_lex_name 69 66 -3 bc_lex_lineComment 36 33 -3 bc_lex_assign 31 28 -3 zbc_parse_name 472 468 -4 zbc_vm_process 836 831 -5 zdc_program_execStr 512 506 -6 zbc_parse_text_init 59 53 -6 bc_num_printNewline 51 45 -6 bc_num_printHex 67 61 -6 bc_num_printDigits 137 131 -6 zbc_program_assign 426 419 -7 zbc_parse_stmt_possibly_auto 1682 1675 -7 zbc_program_exec 3977 3964 -13 zbc_program_print 683 656 -27 zbc_lex_next 2233 2161 -72 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/18 up/down: 10/-183) Total: -173 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-24bc: fix "bc -s" only warning on "define f()<newline>", not exitingDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-24bc: POSIX error/warn functions can be 'z' functions tooDenys Vlasenko
In non-interactive config, they either return 'success', or do not return. function old new delta zbc_posix_error_fmt 41 39 -2 bc_parse_expr_empty_ok 1751 1744 -7 zbc_parse_stmt_possibly_auto 1322 1314 -8 ------------------------------------------------------------------------------ (add/remove: 5/5 grow/shrink: 0/2 up/down: 118/-135) Total: -17 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-24bc: remove unnecessary NULL initializersDenys Vlasenko
function old new delta zbc_program_assign 442 426 -16 zbc_program_exec 4043 3977 -66 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-82) Total: -82 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-24bc: move relational LEXs before math LEXs - shorten dc_LEX_to_INST[]Denys Vlasenko
function old new delta dc_LEX_to_INST 48 42 -6 zdc_parse_expr 523 514 -9 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-15) Total: -15 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-24bc: offset dc_LEX_to_INST[] startDenys Vlasenko
function old new delta zdc_parse_expr 516 523 +7 dc_LEX_to_INST 56 48 -8 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/1 up/down: 7/-8) Total: -1 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-24bc: rename BC_LEX_NLINE/WHITESPACE/STR/NAME/NUMBER to XC_LEX_Denys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-24bc: separate many bc and dc LEX constantsDenys Vlasenko
function old new delta zdc_parse_expr 510 516 +6 bc_parse_expr_empty_ok 1963 1966 +3 dc_LEX_to_INST 83 56 -27 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/1 up/down: 9/-27) Total: -18 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-24bc: rename several BC_LEX_OPs to XC_LEX_OPs.Denys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-24bc: move BC_LEX_OP_INC/DEC to the end of operation LEX constantsDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-24bc: rename BC_LEXs to XC_LEXs for common constants, and to DC_LEXs for ↵Denys Vlasenko
dc-specific Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-24bc: move functions/macros around, no code changesDenys Vlasenko
Order now is: enums/structures/defines, utility/common functions, parsing, execution, main loop, main() Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-24bc: rename common INST constants to XC_, dc-specific ones to DC_Denys Vlasenko
This will assist in disentangling dc and bc LEX constants Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-24dc: without -x, do not parse extended regs: 's p' means: store to ' ' reg, printDenys Vlasenko
function old new delta zbc_lex_next 2240 2233 -7 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-7) Total: -7 bytes text data bss dec hex filename 981437 485 7296 989218 f1822 busybox_old 981412 485 7296 989193 f1809 busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-24bc: fix incorrect bit in BC_PARSE_EXPRS_BITS: 'limits' is not allowedDenys Vlasenko
Alsl, move and rename dc_lex_tokens[] to dc_char_to_LEX[] Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-24bc: for "dc only" remove handling of LAST, move OBASE enums up to IBASEDenys Vlasenko
function old new delta dc_LEX_to_INST - 82 +82 bc_parse_pushNUM - 62 +62 zbc_program_num 981 978 -3 bc_result_free 46 43 -3 zbc_program_binOpPrep 305 300 -5 static.msg 24 12 -12 zbc_program_exec 4013 3994 -19 zdc_parse_expr 583 507 -76 dc_parse_insts 83 - -83 ------------------------------------------------------------------------------ (add/remove: 2/1 grow/shrink: 0/6 up/down: 144/-201) Total: -57 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-23bc: fix empty lines in dc generating "bad token" messageDenys Vlasenko
function old new delta zdc_program_asciify - 370 +370 zbc_program_pushArray - 147 +147 zbc_vm_process 824 828 +4 zbc_program_exec 4182 4046 -136 zdc_program_printStream 146 - -146 zbc_program_read 268 - -268 ------------------------------------------------------------------------------ (add/remove: 2/2 grow/shrink: 1/1 up/down: 521/-550) Total: -29 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-22bc: shrink modular exponentiation codeDenys Vlasenko
function old new delta zdc_program_modexp 721 694 -27 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-22bc: do not yet allow 2^2.1Denys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-22bc: avoid having to twiddle b->neg in zbc_num_p()Denys Vlasenko
function old new delta zbc_num_ulong_abs - 70 +70 zbc_num_p 424 413 -11 zbc_num_ulong 81 21 -60 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 0/2 up/down: 70/-71) Total: -1 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-22bc: do not disallow powers to N.0000 degree - it's even shorter codeDenys Vlasenko
function old new delta zbc_num_p 440 424 -16 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-22bc: shrink zbc_num_ulong()Denys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-22bc: make long-running dc drop data it does not need (when it can)Denys Vlasenko
function old new delta zbc_vm_process 765 824 +59 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-22bc: unbreak "z function" macro machineryDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-22dc: unbreak interactive mode - was trying to get next tokens instead of ↵Denys Vlasenko
executing function old new delta zbc_program_read - 268 +268 zdc_program_printStream - 146 +146 zbc_program_exec 4046 4182 +136 zdc_program_execStr 472 512 +40 zdc_parse_exprs_until_eof - 26 +26 zbc_vm_process 740 765 +25 zbc_lex_next 2225 2240 +15 zdc_parse_expr 569 535 -34 zbc_program_pushArray 147 - -147 zdc_program_asciify 370 - -370 ------------------------------------------------------------------------------ (add/remove: 3/2 grow/shrink: 4/1 up/down: 656/-551) Total: 105 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-22bc: move zbc_lex_next() out of zdc_parse_string() and zdc_parse_mem()Denys Vlasenko
function old new delta zdc_parse_mem 99 93 -6 zdc_parse_expr 586 569 -17 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-23) Total: -23 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-22bc: shorten sanity-check codeDenys Vlasenko
function old new delta zbc_vm_process 745 740 -5 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-22bc: fold single-callsite functions into callers, commonalize codeDenys Vlasenko
function old new delta zbc_vm_process 699 745 +46 zbc_parse_stmt_possibly_auto 1689 1682 -7 bc_parse_reset 113 - -113 ------------------------------------------------------------------------------ (add/remove: 0/1 grow/shrink: 1/1 up/down: 46/-120) Total: -74 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-22bc: zcommon_parse_expr() has only one user, fold it inDenys Vlasenko
function old new delta zbc_program_exec 4021 4046 +25 zdc_parse_expr 589 586 -3 zcommon_parse_expr 28 - -28 ------------------------------------------------------------------------------ (add/remove: 0/1 grow/shrink: 1/1 up/down: 25/-31) Total: -6 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-22bc: zcommon_parse_expr() lost its flags argumentDenys Vlasenko
function old new delta zcommon_parse_expr - 28 +28 zdc_program_execStr 474 472 -2 zbc_program_exec 4023 4021 -2 common_parse_expr 29 - -29 ------------------------------------------------------------------------------ (add/remove: 1/1 grow/shrink: 0/2 up/down: 28/-33) Total: -5 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-22bc: stop using BC_PARSE_NOCALL in dc codeDenys Vlasenko
function old new delta zdc_program_execStr 465 474 +9 zbc_vm_process 701 699 -2 common_parse_expr 32 29 -3 zdc_parse_expr 615 586 -29 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/3 up/down: 9/-34) Total: -25 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-22bc: unbreak read(), remove checks for nested read()Denys Vlasenko
function old new delta zbc_parse_pushSTR - 65 +65 common_parse_expr - 32 +32 bc_error_nested_read_call 10 - -10 bc_parse_expr_empty_ok 1977 1963 -14 zdc_parse_expr 635 615 -20 zcommon_parse_expr 32 - -32 zbc_program_exec 4064 4023 -41 bc_parse_pushSTR 65 - -65 ------------------------------------------------------------------------------ (add/remove: 2/3 grow/shrink: 0/3 up/down: 97/-182) Total: -85 bytes text data bss dec hex filename 981661 485 7296 989442 f1902 busybox_old 981540 485 7296 989321 f1889 busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-21bc: code shrinkDenys Vlasenko
function old new delta bc_result_pop_and_push - 73 +73 zbc_program_exec 4068 4064 -4 bc_program_binOpRetire 46 32 -14 zdc_program_assignStr 146 126 -20 zdc_program_asciify 395 370 -25 bc_program_retire 35 7 -28 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 0/5 up/down: 73/-91) Total: -18 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-21bc: rename BcInstPtr::idx and ::lenDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-21bc: remove unnecessary initializationsDenys Vlasenko
function old new delta zdc_program_asciify 403 395 -8 zbc_program_print 691 683 -8 zbc_program_exec 4079 4068 -11 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/3 up/down: 0/-27) Total: -27 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-21bc: use non-allocated BcNum's where appropriateDenys Vlasenko
function old new delta zbc_num_printNum 540 543 +3 zdc_program_asciify 407 403 -4 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/1 up/down: 3/-4) Total: -1 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-21bc: optimize bc_vec_push() usageDenys Vlasenko
function old new delta bc_parse_pushNUM 87 80 -7 zbc_parse_stmt_possibly_auto 1697 1689 -8 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-15) Total: -15 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-21bc: fix for() to not leave data on stackDenys Vlasenko
function old new delta zbc_parse_stmt_possibly_auto 1665 1697 +32 zbc_vm_process 672 701 +29 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/0 up/down: 61/0) Total: 61 bytes text data bss dec hex filename 981656 485 7296 989437 f18fd busybox_old 981748 485 7296 989529 f1959 busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>