aboutsummaryrefslogtreecommitdiff
path: root/miscutils/bc.c
AgeCommit message (Collapse)Author
2018-12-20bc: fix keyword matching to not think "ifz" is the "if" keywordDenys Vlasenko
function old new delta zbc_lex_next 2224 2225 +1 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-20bc: shrink "dc only" code by dropping unused structure membersDenys Vlasenko
function old new delta zbc_program_num 979 981 +2 zbc_program_pushArray 147 145 -2 bc_program_pushVar 198 196 -2 bc_program_func 17 15 -2 dc_num_printChar 24 21 -3 bc_program_retire 35 32 -3 bc_program_binOpRetire 46 43 -3 zdc_program_printStream 153 148 -5 zbc_program_prep 91 86 -5 zbc_program_copyToVar 300 295 -5 zdc_program_modexp 721 715 -6 zbc_program_binOpPrep 311 305 -6 bc_program_addFunc 138 132 -6 bc_num_printNewline 51 45 -6 bc_num_printHex 67 61 -6 bc_num_printDigits 137 131 -6 zdc_program_assignStr 146 137 -9 bc_program_reset 64 55 -9 bc_func_free 27 5 -22 bc_parse_free 38 8 -30 bc_parse_create 92 47 -45 bc_func_init 50 5 -45 dc_main 691 645 -46 zdc_program_execStr 496 442 -54 zbc_program_print 677 623 -54 zbc_vm_process 204 137 -67 zbc_program_exec 4132 4057 -75 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/26 up/down: 2/-522) Total: -520 bytes text data bss dec hex filename 969767 485 7296 977548 eea8c busybox_old 969210 485 7296 976991 ee85f busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-19bc: shorten bc_program_addFunc()Denys Vlasenko
function old new delta bc_func_init - 50 +50 bc_program_addFunc 201 138 -63 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 0/1 up/down: 50/-63) Total: -13 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-19bc: fix "dc only" and "bc only" configsDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-19bc: rename dc-specific functions, simplify zdc_program_execStr() a bitDenys Vlasenko
function old new delta zbc_program_execStr 496 - -496 zdc_program_execStr - 491 +491 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-19bc: rename zbc_parse_string->bc_parse_pushSTR, do not emit next opcode in itDenys Vlasenko
function old new delta bc_parse_pushSTR - 73 +73 zbc_parse_stmt_possibly_auto 1638 1640 +2 zbc_parse_string 89 - -89 ------------------------------------------------------------------------------ (add/remove: 1/1 grow/shrink: 1/0 up/down: 75/-89) Total: -14 bytes text data bss dec hex filename 981377 485 7296 989158 f17e6 busybox_old 981363 485 7296 989144 f17d8 busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-19bc: avoid bc_vec_item() calls in bc_vm_run()Denys Vlasenko
function old new delta bc_vm_run 124 112 -12 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-19bc: avoid bc_vec_item() calls in bc_array_copy()Denys Vlasenko
function old new delta zbc_program_copyToVar 311 300 -11 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-19bc: avoid successive bc_vec_item(&func->autos, i)Denys Vlasenko
function old new delta zbc_func_insert 97 100 +3 zbc_program_call 353 354 +1 zbc_program_exec 4085 4078 -7 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/1 up/down: 4/-7) Total: -3 bytes text data bss dec hex filename 981403 485 7296 989184 f1800 busybox_old 981400 485 7296 989181 f17fd busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-19bc: remove unnecessary union useDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-19bc: "unsigned_n > 0" is shorter code than "unsigned_n >= 1"Denys Vlasenko
function old new delta zbc_program_print 680 677 -3 zbc_program_exec 4089 4085 -4 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-7) Total: -7 bytes text data bss dec hex filename 981404 485 7296 989185 f1801 busybox_old 981397 485 7296 989178 f17fa busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-19bc: open-code bc_parse_updateFunc() macroDenys Vlasenko
This clearly shows one place which would need changing for nested funcdefs to work. function old new delta bc_parse_reset 106 110 +4 zbc_vm_process 586 585 -1 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/1 up/down: 4/-1) Total: 3 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-19bc: make bc_program_addFunc() return new idx, untangle &p->fidx interactionDenys Vlasenko
In: bc_program_addFunc(name, idx); p->func = bc_program_func(p->fidx); in some cases p->fidx was updated by _first_ statement - because passed idx was pointing at it. This was very obscure. function old new delta zdc_parse_expr 653 658 +5 bc_program_addFunc 204 201 -3 zbc_vm_process 594 586 -8 bc_vm_init 663 655 -8 zbc_parse_name 482 472 -10 bc_parse_addFunc 25 - -25 zbc_program_asciify 473 447 -26 ------------------------------------------------------------------------------ (add/remove: 0/1 grow/shrink: 1/5 up/down: 5/-80) Total: -75 bytes text data bss dec hex filename 981482 485 7296 989263 f184f busybox_old 981401 485 7296 989182 f17fe busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-19bc: "reload stack only after insts" change missed a few placesDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-19bc: rename a few functionsDenys Vlasenko
function old new delta bc_map_find_ge - 71 +71 bc_map_find_exact - 50 +50 bc_map_index 50 - -50 bc_map_find 71 - -71 ------------------------------------------------------------------------------ (add/remove: 2/2 grow/shrink: 0/0 up/down: 121/-121) Total: 0 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-19bc: remove redundant strdup+free in zbc_parse_call()Denys Vlasenko
function old new delta zbc_parse_name 527 482 -45 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-45) Total: -45 bytes text data bss dec hex filename 981541 485 7296 989322 f188a busybox_old 981486 485 7296 989267 f1853 busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-19bc: delete G.prog.strmb for realDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-19bc: in execution loop, reload stack only after insts which can change itDenys Vlasenko
Only these functions affect G.prog.exestack: zbc_program_read zbc_program_call zbc_program_return zbc_program_nquit zbc_program_execStr function old new delta zbc_program_exec 3995 4093 +98 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/0 up/down: 98/0) Total: 98 bytes text data bss dec hex filename 981364 485 7296 989145 f17d9 busybox_old 981462 485 7296 989243 f183b busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18bc: simplify bc_array_expand()Denys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18bc: code shrinkDenys Vlasenko
function old new delta zbc_program_print 684 680 -4 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-4) Total: -4 bytes text data bss dec hex filename 981368 485 7296 989149 f17dd busybox_old 981364 485 7296 989145 f17d9 busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18bc: code shrinkDenys Vlasenko
function old new delta bc_program_name 67 63 -4 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-4) Total: -4 bytes text data bss dec hex filename 981372 485 7296 989153 f17e1 busybox_old 981368 485 7296 989149 f17dd busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18bc: shrink bc_program_pushVar()Denys Vlasenko
function old new delta bc_program_pushVar 203 198 -5 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18bc: get rid of G.prog.ob, G.prog.strmbDenys Vlasenko
function old new delta zbc_num_printNum 489 540 +51 zbc_program_asciify 426 473 +47 zbc_program_print 686 684 -2 zbc_program_exec 4008 3995 -13 zbc_program_assign 474 440 -34 bc_vm_init 739 663 -76 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/4 up/down: 98/-125) Total: -27 bytes text data bss dec hex filename 981404 485 7296 989185 f1801 busybox_old 981377 485 7296 989158 f17e6 busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18bc: do not show -i in --help, it's a NOP (for now)Denys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18bc: style edit, no code changesDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18bc: shrink bc_program_index()Denys Vlasenko
function old new delta bc_program_index 66 47 -19 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-19) Total: -19 bytes text data bss dec hex filename 981418 485 7296 989199 f180f busybox_old 981399 485 7296 989180 f17fc busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18bc: fix "echo -n '#foo' | bc" not eating last 'o'Denys Vlasenko
function old new delta zdc_parse_expr 656 653 -3 bc_lex_lineComment 39 36 -3 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-6) Total: -6 bytes text data bss dec hex filename 981424 485 7296 989205 f1815 busybox_old 981418 485 7296 989199 f180f busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18bc: shrink zdc_parse_expr()Denys Vlasenko
function old new delta zdc_parse_expr 656 653 -3 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18bc: optimize zbc_lex_string()Denys Vlasenko
function old new delta zbc_lex_next 2359 2353 -6 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18bc: shrink zdc_lex_string()Denys Vlasenko
This actually fixes a rather obscure bug. This was failing to find end of the string: $ echo -n '[foo]' | dc dc: string end could not be found function old new delta zbc_lex_next 2230 2141 -89 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-89) Total: -89 bytes text data bss dec hex filename 981461 485 7296 989242 f183a busybox_old 981372 485 7296 989153 f17e1 busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18bc: another for() loop simplifiedDenys Vlasenko
function old new delta zbc_program_print 688 686 -2 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18bc: simplify another for() loopDenys Vlasenko
function old new delta zbc_num_d 563 557 -6 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18bc: rewrite more for() loopsDenys Vlasenko
function old new delta bc_program_name 75 67 -8 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18bc: rewrite another for() loopDenys Vlasenko
function old new delta zbc_num_d 570 563 -7 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18bc: replace signed division / 10 by unsignedDenys Vlasenko
function old new delta zbc_num_a 443 441 -2 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18bc: rewrite bc_num_compare() to be readableDenys Vlasenko
function old new delta bc_num_compare 59 51 -8 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18bc: fold zbc_num_stream() into its single callerDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18bc: get rid of BcNum BcProgram::ib,hexbDenys Vlasenko
function old new delta zbc_program_num 907 943 +36 zbc_program_assign 485 474 -11 bc_vm_init 757 739 -18 bc_num_ten 30 - -30 ------------------------------------------------------------------------------ (add/remove: 0/1 grow/shrink: 1/2 up/down: 36/-59) Total: -23 bytes text data bss dec hex filename 981532 485 7296 989313 f1881 busybox_old 981509 485 7296 989290 f186a busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18bc: fixes to bugs found while testing 64-bit buildDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18bc: fixed from 64-bit compileDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-17bc: remove "error after expression parsing" checkDenys Vlasenko
It is misplaced: caller knows better what can or cannot follow the expression. Sometimes even caller's caller: "if (1) return a+b else..." - parser of "return" does not know that "else" after it is valid, parser of stmt does not know it either, - only parser of "if" knows it! The removed code balked on e.g. "{ print 1 }" statement. This does not break any valid programs, but starts accepting some invalid ones, e.g. "print 1 print 2" would work. function old new delta zcommon_parse_expr 40 32 -8 zbc_parse_name 509 494 -15 zbc_parse_stmt_possibly_auto 1678 1638 -40 bc_parse_expr_empty_ok 2025 1977 -48 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/4 up/down: 0/-111) Total: -111 bytes text data bss dec hex filename 981599 485 7296 989380 f18c4 busybox_old 981488 485 7296 989269 f1855 busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-17bc: tighten up input NUL handlingDenys Vlasenko
function old new delta static.dc_lex_tokens - 90 +90 bc_error_bad_character 17 31 +14 static.dc_lex_regs - 13 +13 bc_read_line 406 410 +4 bc_program_index 64 66 +2 dc_lex_regs 13 - -13 zdc_parse_expr 671 656 -15 zbc_lex_next 2318 2230 -88 dc_lex_tokens 91 - -91 ------------------------------------------------------------------------------ (add/remove: 2/2 grow/shrink: 3/2 up/down: 123/-207) Total: -84 bytes text data bss dec hex filename 981667 485 7296 989448 f1908 busybox_old 981599 485 7296 989380 f18c4 busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-17bc: simplify zdc_parse_string()Denys Vlasenko
function old new delta bc_program_index 64 66 +2 zdc_parse_expr 671 656 -15 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/1 up/down: 2/-15) Total: -13 bytes text data bss dec hex filename 981667 485 7296 989448 f1908 busybox_old 981655 485 7296 989436 f18fc busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-17bc: use common stringsDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-17bc: tidy up "z-function" macro machineryDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-17bc: parse file arguments piecemeal (do not read entire file)Denys Vlasenko
function old new delta bc_read_line 336 406 +70 zbc_vm_execute_FILE - 67 +67 zbc_lex_next 2309 2318 +9 zbc_program_exec 4002 4008 +6 bc_program_index 66 64 -2 bc_vm_run 139 124 -15 zbc_vm_file 208 32 -176 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 3/3 up/down: 152/-193) Total: -41 bytes text data bss dec hex filename 981736 485 7296 989517 f194d busybox_old 981667 485 7296 989448 f1908 busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-17bc: move fflush to the _actual_ execution loopDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-17bc: fix typo: defone -> defineDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-17bc: factor out common codeDenys Vlasenko
function old new delta zbc_parse_stmt_allow_NLINE_before - 59 +59 bc_parse_pushJUMP_ZERO - 27 +27 bc_parse_pushJUMP - 27 +27 rewrite_label_to_current - 19 +19 zbc_vm_process 594 599 +5 zbc_lex_next_and_skip_NLINE 22 - -22 zbc_parse_stmt_fail_if_bare_NLINE 28 - -28 zbc_parse_stmt_possibly_auto 1909 1678 -231 ------------------------------------------------------------------------------ (add/remove: 4/2 grow/shrink: 1/1 up/down: 137/-281) Total: -144 bytes text data bss dec hex filename 981879 485 7296 989660 f19dc busybox_old 981755 485 7296 989536 f1960 busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-16bc: remove use of "BcInstPtr ip" object from loop parsingDenys Vlasenko
function old new delta zbc_parse_stmt_possibly_auto 1964 1909 -55 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-55) Total: -55 bytes text data bss dec hex filename 981934 485 7296 989715 f1a13 busybox_old 981879 485 7296 989660 f19dc busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>