aboutsummaryrefslogtreecommitdiff
path: root/miscutils/bc.c
AgeCommit message (Collapse)Author
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>
2018-12-21bc: fix infinite state growth for "yes 1 | bc" caseDenys Vlasenko
function old new delta zbc_vm_process 585 672 +87 bc_func_init 50 86 +36 zbc_program_num 990 1022 +32 bc_program_str 17 47 +30 bc_program_current_func - 22 +22 bc_parse_pushNUM 66 87 +21 bc_func_free 27 43 +16 zbc_num_binary 145 147 +2 bc_program_reset 64 61 -3 bc_parse_pushSTR 73 65 -8 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 7/2 up/down: 246/-11) Total: 235 bytes text data bss dec hex filename 981393 485 7296 989174 f17f6 busybox_old 981656 485 7296 989437 f18fd busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-21bc: fix commentDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-21bc: for(;;) fix from upstreamDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-21bc: shrink bc_program_add_fn()Denys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>