aboutsummaryrefslogtreecommitdiff
path: root/miscutils/bc.c
AgeCommit message (Collapse)Author
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>
2018-12-16bc: store only index in p->exits, it's the only thing used thereDenys Vlasenko
function old new delta zbc_parse_stmt_possibly_auto 1967 1964 -3 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-3) Total: -3 bytes text data bss dec hex filename 981937 485 7296 989718 f1a16 busybox_old 981934 485 7296 989715 f1a13 busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-16bc: p->exits.func is never zero, do not check for thatDenys Vlasenko
function old new delta zbc_parse_stmt_possibly_auto 1978 1967 -11 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-11) Total: -11 bytes text data bss dec hex filename 981948 485 7296 989729 f1a21 busybox_old 981937 485 7296 989718 f1a16 busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-16bc: remove redundant JUMP generation when parsing 'while'Denys Vlasenko
function old new delta zbc_parse_stmt_possibly_auto 2065 2025 -40 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-40) Total: -40 bytes text data bss dec hex filename 982035 485 7296 989816 f1a78 busybox_old 981995 485 7296 989776 f1a50 busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-16bc: simplify use of "ip" in loop parsing functionsDenys Vlasenko
function old new delta zbc_parse_stmt_possibly_auto 2106 2065 -41 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-41) Total: -41 bytes text data bss dec hex filename 982076 485 7296 989857 f1aa1 busybox_old 982035 485 7296 989816 f1a78 busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-16bc: shring bc_lib[]Denys Vlasenko
function old new delta bc_lib 1586 1584 -2 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-16bc: shrink zbc_parse_if() a bit moreDenys Vlasenko
function old new delta zbc_parse_stmt_possibly_auto 2180 2106 -74 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-74) Total: -74 bytes text data bss dec hex filename 982152 485 7296 989933 f1aed busybox_old 982078 485 7296 989859 f1aa3 busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-16bc: stop using p->exits when parsing if()Denys Vlasenko
function old new delta zbc_parse_stmt_possibly_auto 2180 2138 -42 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-16bc: preparation to stop using p->exits when parsing if()Denys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-16bc: fix "print 1,2,3" parsingDenys Vlasenko
function old new delta zbc_parse_stmt_possibly_auto 2245 2180 -65 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-65) Total: -65 bytes text data bss dec hex filename 982237 485 7296 990018 f1b42 busybox_old 982152 485 7296 989933 f1aed busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-16bc: disallow empty statement as function bodyDenys Vlasenko
$ bc define z() <cr> <cr> bc: no statement after 'define' function old new delta zbc_parse_stmt_possibly_auto 2239 2245 +6 zbc_vm_process 589 594 +5 zbc_parse_stmt_fail_if_bare_NLINE 25 28 +3 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 3/0 up/down: 14/0) Total: 14 bytes text data bss dec hex filename 982216 485 7296 989997 f1b2d busybox_old 982237 485 7296 990018 f1b42 busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-16bc: allow only one <newline> between if() and stmtDenys Vlasenko
Attempt to have more than one causes this error message: $ bc -q if (1)<cr> <cr> bc: no statement after 'if' Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-16bc: simplify bc_parse_pushName(), do not free name in it - avoids one strdupDenys Vlasenko
function old new delta zbc_parse_name 511 509 -2 zdc_parse_register 50 43 -7 bc_parse_pushName 61 39 -22 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/3 up/down: 0/-31) Total: -31 bytes text data bss dec hex filename 982183 485 7296 989964 f1b0c busybox_old 982152 485 7296 989933 f1aed busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-16bc: simplify zbc_parse_break_or_continue(), logic is the sameDenys Vlasenko
function old new delta zbc_parse_stmt_possibly_auto 2259 2224 -35 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-35) Total: -35 bytes text data bss dec hex filename 982218 485 7296 989999 f1b2f busybox_old 982183 485 7296 989964 f1b0c busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-16bc: fold zbc_parse_else() into its only callerDenys Vlasenko
While at it, allow newline between "else" and its body Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-16bc: fold bc_parse_noElse() into its only callerDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-16bc: delete unused (write-only) BcParse::nbraces memberDenys Vlasenko
function old new delta zbc_lex_next 2296 2309 +13 bc_parse_expr_empty_ok 2021 2025 +4 bc_vm_init 760 757 -3 bc_num_printNewline 54 51 -3 zbc_num_divmod 156 150 -6 bc_parse_reset 113 106 -7 zbc_lex_number 200 192 -8 bc_parse_number 83 66 -17 zdc_parse_expr 707 671 -36 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/7 up/down: 17/-80) Total: -63 bytes text data bss dec hex filename 982275 485 7296 990056 f1b68 busybox_old 982212 485 7296 989993 f1b29 busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-16bc: fixes for multi-line if/while/forDenys Vlasenko
function old new delta zbc_vm_process 561 589 +28 zbc_lex_next_and_skip_NLINE - 22 +22 zbc_parse_stmt_possibly_auto 2232 2253 +21 zbc_lex_skip_if_at_NLINE - 14 +14 zbc_lex_number 192 200 +8 zbc_num_divmod 150 156 +6 bc_vm_run 134 139 +5 bc_vm_init 757 760 +3 bc_num_printNewline 51 54 +3 ------------------------------------------------------------------------------ (add/remove: 2/0 grow/shrink: 7/0 up/down: 110/0) Total: 110 bytes text data bss dec hex filename 982138 485 7296 989919 f1adf busybox_old 982275 485 7296 990056 f1b68 busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-16bc: fix handling of 'return' not in functions, and 'define f()<newline>{...}'Denys Vlasenko
function old new delta zbc_vm_process 561 597 +36 zbc_parse_stmt_possibly_auto 2232 2253 +21 zbc_lex_number 192 200 +8 zbc_num_divmod 150 156 +6 bc_vm_run 134 139 +5 bc_vm_init 757 760 +3 bc_num_printNewline 51 54 +3 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 7/0 up/down: 82/0) Total: 82 bytes text data bss dec hex filename 982138 485 7296 989919 f1adf busybox_old 982247 485 7296 990028 f1b4c busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-16bc: partially rewrite parser, tests pass, ^C might be broken nowDenys Vlasenko
The entire control construct (if/while/for/funcdef) or {} block is "eaten" by the corresponding parsing function, instead of maintaining special "block flag stack" with magic bits in it, and returning to main input loop after every inner statement (every input line, essentially). This required moving line input deep into lexer - now zbc_lex_next() triggers more reading when needed. "block flag stack" is gone. Correctness of ^C handling wasn't checked, might need fixing now. if/else syntax is changed to match GNU bc: "else" can not be on the next line (the rationale is that "if (1) 2" statement in interactive mode should execute and print 2 instead of waiting for possible "else ..." line). This change fixes the following examples: if (1) if (1) 1 else 2 else 3 if (0) 1 else if (1) 2 define w() { auto z; return 1; } function old new delta zbc_parse_stmt_possibly_auto - 2232 +2232 zbc_vm_process 89 561 +472 zbc_lex_next 1982 2296 +314 bc_vm_init 749 757 +8 bc_parse_expr_empty_ok 2016 2021 +5 bc_num_printNewline 54 51 -3 zbc_program_read 289 280 -9 bc_parse_free 47 38 -9 bc_parse_reset 126 113 -13 bc_parse_create 108 92 -16 bc_parse_push_block_flag 47 - -47 bc_parse_noElse 48 - -48 zbc_parse_text_init 113 59 -54 zbc_parse_body 121 - -121 zbc_parse_else 125 - -125 zbc_parse_endBody 254 - -254 bc_vm_run 421 134 -287 zbc_parse_auto 290 - -290 zcommon_parse 476 - -476 zbc_parse_stmt 1682 7 -1675 ------------------------------------------------------------------------------ (add/remove: 1/7 grow/shrink: 4/8 up/down: 3031/-3427) Total: -396 bytes text data bss dec hex filename 982586 485 7296 990367 f1c9f busybox_old 982138 485 7296 989919 f1adf busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-15bc: lexer debugging, added some failing test casesDenys Vlasenko
function old new delta bc_parse_push_block_flag - 47 +47 zbc_parse_body 107 121 +14 zbc_num_divmod 156 150 -6 zbc_lex_number 200 192 -8 zbc_parse_endBody 264 254 -10 bc_parse_startBody 47 - -47 ------------------------------------------------------------------------------ (add/remove: 1/1 grow/shrink: 1/3 up/down: 61/-71) Total: -10 bytes text data bss dec hex filename 982596 485 7296 990377 f1ca9 busybox_old 982586 485 7296 990367 f1c9f busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-15bc: simplify BC_INST_JUMP[_ZERO] handlingDenys Vlasenko
function old new delta zbc_program_exec 4063 4050 -13 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>