aboutsummaryrefslogtreecommitdiff
path: root/miscutils/bc.c
AgeCommit message (Collapse)Author
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>
2018-12-15bc: rewrite "block flag stack" using simple realloc'ed byte arrayDenys Vlasenko
Each access to current top flag took a function call + fetch of three data items + multiplication and some additions + and then following the resulting pointer. After the change, it is: fetch pointer value + one byte access via this pointer. function old new delta bc_parse_startBody 45 49 +4 bc_parse_free 46 47 +1 zbc_parse_auto 188 185 -3 bc_parse_push 14 11 -3 bc_vm_run 398 394 -4 zbc_vm_process 63 58 -5 zdc_parse_expr 638 632 -6 zbc_parse_body 101 95 -6 bc_parse_addFunc 31 25 -6 bc_parse_noElse 56 48 -8 zcommon_parse 341 331 -10 zbc_parse_else 134 123 -11 bc_parse_create 124 108 -16 zbc_parse_text_init 123 104 -19 zbc_parse_endBody 292 252 -40 zbc_parse_stmt 1479 1420 -59 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/14 up/down: 5/-196) Total: -191 bytes text data bss dec hex filename 979880 485 7296 987661 f120d busybox_old 979689 485 7296 987470 f114e busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-14bc: drop zbc_parse_endBody() bool parameter, move its code to caller which ↵Denys Vlasenko
uses it function old new delta zbc_parse_stmt 1456 1479 +23 zbc_parse_body 103 101 -2 zbc_parse_endBody 326 292 -34 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/2 up/down: 23/-36) Total: -13 bytes text data bss dec hex filename 979893 485 7296 987674 f121a busybox_old 979880 485 7296 987661 f120d busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-14bc: shorten one message, make defines more readableDenys Vlasenko
text data bss dec hex filename 979916 485 7296 987697 f1231 busybox_old 979893 485 7296 987674 f121a busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-14bc: pull zbc_lex_next() call out of zbc_parse_operator() into one caller ↵Denys Vlasenko
that uses it function old new delta bc_parse_operator - 144 +144 bc_parse_expr_empty_ok 1788 1792 +4 zbc_parse_operator 170 - -170 ------------------------------------------------------------------------------ (add/remove: 1/1 grow/shrink: 1/0 up/down: 148/-170) Total: -22 bytes text data bss dec hex filename 979938 485 7296 987719 f1247 busybox_old 979916 485 7296 987697 f1231 busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-14bx: add more debug scaffoldingDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-14bc: convert macro bc_parse_push() to function, add debug infrastructureDenys Vlasenko
function old new delta bc_parse_push - 14 +14 zbc_parse_else 132 134 +2 bc_parse_pushName 63 61 -2 zbc_parse_operator 174 170 -4 bc_parse_number 87 83 -4 zbc_parse_string 97 89 -8 bc_parse_pushIndex 68 60 -8 zbc_parse_endBody 339 326 -13 zbc_parse_name 401 387 -14 zdc_parse_mem 107 91 -16 zdc_parse_expr 680 638 -42 zbc_parse_stmt 1502 1456 -46 bc_parse_expr_empty_ok 1838 1788 -50 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 1/11 up/down: 16/-207) Total: -191 bytes text data bss dec hex filename 980129 485 7296 987910 f1306 busybox_old 979938 485 7296 987719 f1247 busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-14bc: rename zbc_parse_text() to ..._init(), reuse existing code for library ↵Denys Vlasenko
parsing function old new delta zbc_parse_text_init - 123 +123 bc_vm_run 423 398 -25 zbc_parse_text 123 - -123 ------------------------------------------------------------------------------ (add/remove: 1/1 grow/shrink: 0/1 up/down: 123/-148) Total: -25 bytes text data bss dec hex filename 980154 485 7296 987935 f131f busybox_old 980129 485 7296 987910 f1306 busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-14bc: compress two constant arguments of bc_lex_assign() to oneDenys Vlasenko
function old new delta zbc_program_num 836 835 -1 bc_lex_assign 34 31 -3 zbc_lex_next 1930 1880 -50 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/3 up/down: 0/-54) Total: -54 bytes text data bss dec hex filename 980208 485 7296 987989 f1355 busybox_old 980154 485 7296 987935 f131f busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-14bc: remove stale comment, empty lines, regularize comment styleDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-14bc: tweak bc_num_parseDecimal() for readability, logic is not changedDenys Vlasenko
function old new delta zbc_program_num 836 835 -1 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-14bc: shrink s() in library againDenys Vlasenko
function old new delta bc_lib 1596 1586 -10 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-10) Total: -10 bytes text data bss dec hex filename 980152 485 7296 987933 f131d busybox_old 980142 485 7296 987923 f1313 busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-14bc: yet another library shrinkDenys Vlasenko
function old new delta bc_lib 1604 1596 -8 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-8) Total: -8 bytes text data bss dec hex filename 980160 485 7296 987941 f1325 busybox_old 980152 485 7296 987933 f131d busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-14bc: shrink internal library yet moreDenys Vlasenko
function old new delta bc_lib 1609 1604 -5 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-5) Total: -5 bytes text data bss dec hex filename 980165 485 7296 987946 f132a busybox_old 980160 485 7296 987941 f1325 busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-14bc: shrink internal library moreDenys Vlasenko
function old new delta bc_lib 1618 1609 -9 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-14bc: shrink internal libraryDenys Vlasenko
function old new delta bc_lib 1674 1618 -56 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-14bc: group ENABLE_BC code a bit better, no logic changesDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-13bc: fix "dc only" bugDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-13bc: unbreak "only bc" and "only dc" configsDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-13bc: simplify bc_lex_whitespace()Denys Vlasenko
function old new delta bc_lex_whitespace 52 41 -11 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-13bc: G.sbgn and G.send are unused, remove themDenys Vlasenko
function old new delta bc_program_index 66 64 -2 bc_parse_expr_empty_ok 1840 1838 -2 dc_main 176 168 -8 bc_main 73 65 -8 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/4 up/down: 0/-20) Total: -20 bytes text data bss dec hex filename 980327 485 7296 988108 f13cc busybox_old 980307 485 7296 988088 f13b8 busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-13bc: simplify filename saving in zbc_vm_file()Denys Vlasenko
function old new delta bc_vm_run 433 423 -10 zbc_vm_file 187 174 -13 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-23) Total: -23 bytes text data bss dec hex filename 980350 485 7296 988131 f13e3 busybox_old 980327 485 7296 988108 f13cc busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-13bc: do not append duplicate NUL, reduce indentation in bc_read_line()Denys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-13bc: change bc_read_line() and zbc_vm_stdin() to avoid double buffersDenys Vlasenko
function old new delta bc_read_line 129 124 -5 bc_vm_run 523 433 -90 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-95) Total: -95 bytes text data bss dec hex filename 980445 485 7296 988226 f1442 busybox_old 980350 485 7296 988131 f13e3 busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-13bc: further simplification in zbc_vm_stdin()Denys Vlasenko
function old new delta bc_vm_run 500 523 +23 bc_vec_concat 66 - -66 ------------------------------------------------------------------------------ (add/remove: 0/1 grow/shrink: 1/0 up/down: 23/-66) Total: -43 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-13bc: fix another thinkoDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-13bc: fix a thinko: dc uses [] string delimiters, bot bc!Denys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-13bc: fix comment handlingDenys Vlasenko
function old new delta bc_vm_run 514 513 -1 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-13bc: further zbc_vm_stdin() optimizationsDenys Vlasenko
function old new delta bc_vm_run 534 514 -20 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-13bc: shrink zbc_vm_stdin()Denys Vlasenko
function old new delta bc_vm_run 592 534 -58 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-13bc: trim config help text, add a few comments, no code changesDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-12bc: unbreak CONFIG_FEATURE_BC_SIGNALS=y configDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-12bc: remove lexer function pointerDenys Vlasenko
function old new delta zbc_lex_next 81 1930 +1849 bc_parse_create 131 124 -7 common_parse_init 31 - -31 zdc_lex_token 672 - -672 zbc_lex_token 1193 - -1193 ------------------------------------------------------------------------------ (add/remove: 0/3 grow/shrink: 1/1 up/down: 1849/-1903) Total: -54 bytes text data bss dec hex filename 980634 485 7296 988415 f14ff busybox_old 980580 485 7296 988361 f14c9 busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-12bc: remove parse function pointerDenys Vlasenko
function old new delta zbc_program_asciify - 372 +372 zcommon_parse - 341 +341 zbc_program_printStream - 141 +141 zbc_program_pushArray - 111 +111 zbc_program_nquit - 92 +92 zbc_vm_process 61 63 +2 zbc_parse_text 122 123 +1 bc_vm_run 591 592 +1 zdc_parse_mem 108 107 -1 zbc_parse_operator 175 174 -1 zbc_parse_else 133 132 -1 zbc_parse_body 104 103 -1 zbc_program_read 261 259 -2 zdc_parse_register 40 37 -3 zbc_parse_string 100 97 -3 zbc_parse_endBody 343 339 -4 zdc_parse_expr 688 680 -8 zbc_parse_auto 198 188 -10 zbc_parse_name 414 401 -13 common_parse_init 45 31 -14 zdc_parse_parse 23 - -23 bc_parse_create 158 131 -27 zbc_parse_stmt 1540 1502 -38 bc_parse_expr_empty_ok 1882 1840 -42 zbc_program_exec 3963 3837 -126 zbc_parse_parse 311 - -311 zbc_program_modexp 556 - -556 ------------------------------------------------------------------------------ (add/remove: 5/3 grow/shrink: 3/16 up/down: 1061/-1184) Total: -123 bytes text data bss dec hex filename 980757 485 7296 988538 f157a busybox_old 980634 485 7296 988415 f14ff busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-12bc: convert two more functions to "z" logicDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>