aboutsummaryrefslogtreecommitdiff
path: root/miscutils/bc.c
AgeCommit message (Collapse)Author
2018-12-05bc: simpler calling convention for bc_read_file(), bc_program_search()Denys Vlasenko
function old new delta bc_vm_run 1854 2020 +166 bc_program_assign 482 476 -6 bc_program_pushVar 225 215 -10 bc_program_call 366 356 -10 bc_program_num 1126 1115 -11 bc_program_copyToVar 354 343 -11 bc_program_search 164 152 -12 bc_program_execStr 573 559 -14 bc_program_exec 4544 4530 -14 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/8 up/down: 166/-88) Total: 78 bytes text data bss dec hex filename 988523 485 7296 996304 f33d0 busybox_old 988601 485 7296 996382 f341e busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05bc: bc_num_ulong2num(), bc_program_pushGlobal(), bc_program_stackLen() never ↵Denys Vlasenko
fail function old new delta bc_num_ulong2num 66 62 -4 bc_num_printNum 572 563 -9 bc_program_exec 4562 4544 -18 bc_program_num 1147 1126 -21 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/4 up/down: 0/-52) Total: -52 bytes text data bss dec hex filename 988575 485 7296 996356 f3404 busybox_old 988523 485 7296 996304 f33d0 busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05bc: stop passing around pointers to G.prog, they are all constantDenys Vlasenko
function old new delta bc_program_exec 4523 4562 +39 bc_program_assign 450 482 +32 bc_program_assignStr 131 159 +28 bc_program_print 762 775 +13 bc_program_num 1134 1147 +13 bc_program_search 154 164 +10 bc_num_ulong 85 95 +10 dc_parse_expr 719 727 +8 bc_program_retire 34 40 +6 bc_program_reset 168 174 +6 bc_program_binOpRetire 50 56 +6 bc_program_addFunc 220 226 +6 bc_program_prep 88 89 +1 dc_parse_init 18 17 -1 bc_program_copyToVar 355 354 -1 bc_parse_text 142 141 -1 bc_parse_number 88 87 -1 bc_parse_init 18 17 -1 bc_parse_endBody 423 422 -1 common_parse_init 29 26 -3 bc_parse_string 103 100 -3 bc_parse_addFunc 44 41 -3 bc_program_call 371 366 -5 bc_program_binOpPrep 301 296 -5 bc_program_read 342 336 -6 bc_parse_create 198 192 -6 bc_program_pushArray 143 136 -7 bc_parse_reset 194 187 -7 bc_vm_process 323 315 -8 bc_program_pushVar 236 225 -11 bc_vm_run 1872 1854 -18 bc_parse_name 590 570 -20 bc_program_execStr 594 573 -21 bc_program_modexp 793 763 -30 bc_program_printStream 172 - -172 ------------------------------------------------------------------------------ (add/remove: 0/1 grow/shrink: 13/21 up/down: 178/-331) Total: -153 bytes text data bss dec hex filename 988728 485 7296 996509 f349d busybox_old 988575 485 7296 996356 f3404 busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05bc: select parse_init() and parse_expr() using IS_BC, not function pointersDenys Vlasenko
function old new delta common_parse_expr - 62 +62 common_parse_init - 29 +29 dc_parse_parse 53 52 -1 dc_parse_expr 723 719 -4 bc_program_execStr 606 594 -12 dc_parse_init 33 18 -15 bc_parse_init 33 18 -15 bc_parse_expression 39 - -39 bc_vm_run 1923 1872 -51 ------------------------------------------------------------------------------ (add/remove: 2/1 grow/shrink: 0/6 up/down: 91/-137) Total: -46 bytes text data bss dec hex filename 988774 485 7296 996555 f34cb busybox_old 988728 485 7296 996509 f349d busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05bc: propagate fixed arguments into calleesDenys Vlasenko
Looks like there is only one "BcProgram" object, &G.prog. function old new delta bc_program_exec 4401 4523 +122 bc_program_execStr 579 606 +27 bc_program_read 323 342 +19 bc_args 83 97 +14 bc_vm_process 327 323 -4 bc_num_ulong 95 85 -10 dc_main 62 48 -14 bc_main 62 48 -14 bc_vm_run 2317 1923 -394 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 4/5 up/down: 182/-436) Total: -254 bytes text data bss dec hex filename 989028 485 7296 996809 f35c9 busybox_old 988774 485 7296 996555 f34cb busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05bc: simplify ^C handlingDenys Vlasenko
It's still buggy: if SIGINT would interrupt e.g. output write(), the result would not be as intended: >>> while ( 1 ) print 1 ... 11111111111111111111111111111111111111111111111111111111111111111111\ 11111111111111111111111111111111111111111111111111111111111111111111\ ^Cready for more input interrupt (type "quit" to exit) >>> bc: output error function old new delta dc_parse_parse 58 53 -5 bc_parse_parse 476 471 -5 bc_num_d 609 604 -5 bc_num_cmp 299 294 -5 bc_num_compare 90 84 -6 bc_parse_expr 2222 2215 -7 bc_num_subArrays 82 74 -8 dc_main 72 62 -10 bc_main 72 62 -10 bc_program_exec 4413 4401 -12 bc_num_a 491 474 -17 bc_read_line 364 344 -20 bc_num_p 540 518 -22 bc_program_reset 192 168 -24 bc_num_k 1031 1005 -26 bc_vm_run 2382 2317 -65 bc_vm_sig 97 - -97 ------------------------------------------------------------------------------ (add/remove: 0/1 grow/shrink: 0/16 up/down: 0/-344) Total: -344 bytes text data bss dec hex filename 989372 485 7296 997153 f3721 busybox_old 989028 485 7296 996809 f35c9 busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05bc: convert to "G trick" - this returns bc to zero bss increaseDenys Vlasenko
function old new delta bc_num_p 518 540 +22 bc_num_k 1010 1031 +21 bc_vm_process 312 327 +15 bc_program_exec 4401 4413 +12 bc_vm_posixError 194 205 +11 bc_num_a 480 491 +11 bc_program_reset 182 192 +10 bc_vm_sig 88 97 +9 bc_vm_error 148 156 +8 bc_parse_expr 2215 2222 +7 bc_num_compare 84 90 +6 dc_parse_parse 53 58 +5 dc_lex_token 670 675 +5 bc_read_line 359 364 +5 bc_parse_parse 471 476 +5 bc_num_cmp 294 299 +5 bc_num_subArrays 84 82 -2 bc_num_d 614 609 -5 dc_main 80 72 -8 bc_main 80 72 -8 bcg 40 - -40 bc_vm_run 2569 2382 -187 ------------------------------------------------------------------------------ (add/remove: 0/1 grow/shrink: 16/5 up/down: 157/-250) Total: -93 bytes text data bss dec hex filename 989425 485 7336 997246 f377e busybox_old 989372 485 7296 997153 f3721 busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05bc: simplify, and restore ^C, fix ^D handlingDenys Vlasenko
^D used to enter infinite loop function old new delta bc_read_line 342 359 +17 bc_args_opt 8 - -8 dc_sig_msg 31 - -31 bc_sig_msg 34 - -34 bc_vm_run 2608 2569 -39 bc_args 123 83 -40 bc_args_lopt 81 - -81 ------------------------------------------------------------------------------ (add/remove: 0/4 grow/shrink: 1/2 up/down: 17/-233) Total: -216 bytes text data bss dec hex filename 989491 485 7336 997312 f37c0 busybox_old 989425 485 7336 997246 f377e busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05bc: simplify, stop testing for IO errors on every outputDenys Vlasenko
function old new delta bc_read_line 297 342 +45 bc_vm_run 2601 2608 +7 bc_program_reset 178 182 +4 bc_args 125 123 -2 dc_name 3 - -3 bc_name 3 - -3 bc_program_printStream 176 172 -4 bcg 48 40 -8 dc_main 97 80 -17 bc_main 97 80 -17 bc_vm_fflush 21 - -21 bc_vm_puts 23 - -23 bc_vm_printf 36 - -36 bc_vm_putchar 46 - -46 bc_vm_exit 46 - -46 bc_vm_process 361 312 -49 bc_vm_info 76 19 -57 bc_copyright 155 - -155 ------------------------------------------------------------------------------ (add/remove: 0/8 grow/shrink: 3/7 up/down: 56/-487) Total: -431 bytes text data bss dec hex filename 989722 485 7344 997551 f38af busybox_old 989491 485 7336 997312 f37c0 busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05bc: fix warnings, initial cleanupsDenys Vlasenko
function old new delta bc_program_exec - 4401 +4401 bc_vm_run - 2601 +2601 bc_parse_expr - 2215 +2215 bc_parse_stmt - 2197 +2197 bc_lib - 1878 +1878 bc_lex_token - 1333 +1333 bc_program_num - 1134 +1134 bc_num_k - 1010 +1010 bc_program_modexp - 793 +793 bc_program_print - 762 +762 dc_parse_expr - 723 +723 dc_lex_token - 670 +670 bc_num_d - 614 +614 bc_parse_name - 590 +590 bc_program_execStr - 579 +579 bc_num_printNum - 572 +572 bc_num_p - 518 +518 bc_num_a - 480 +480 bc_parse_parse - 471 +471 bc_program_assign - 450 +450 bc_parse_endBody - 423 +423 bc_program_call - 371 +371 dc_lex_tokens - 364 +364 bc_vm_process - 361 +361 bc_program_copyToVar - 355 +355 dc_parse_insts - 332 +332 bc_program_read - 323 +323 bc_program_binOpPrep - 301 +301 bc_lex_number - 301 +301 bc_read_line - 297 +297 bc_num_cmp - 294 +294 bc_num_m - 287 +287 bc_parse_auto - 275 +275 bc_num_s - 258 +258 bc_program_pushVar - 236 +236 bc_num_r - 231 +231 bc_program_addFunc - 220 +220 bc_lex_kws - 220 +220 bc_err_msgs - 216 +216 bc_parse_create - 198 +198 bc_vm_posixError - 194 +194 bc_parse_reset - 194 +194 bc_parse_operator - 181 +181 bc_program_reset - 178 +178 bc_program_printStream - 176 +176 bc_num_divmod - 168 +168 bc_copyright - 155 +155 bc_program_search - 154 +154 bc_num_binary - 150 +150 bc_vm_error - 148 +148 bc_program_pushArray - 143 +143 bc_parse_text - 142 +142 bc_num_printDigits - 142 +142 bc_map_insert - 142 +142 bc_parse_else - 139 +139 bc_program_assignStr - 131 +131 bc_args - 125 +125 dc_parse_mem - 116 +116 bc_parse_body - 116 +116 bc_num_split - 113 +113 bc_num_sub - 112 +112 bc_num_add - 112 +112 packed_usage 32958 33066 +108 bc_num_rem - 104 +104 bc_parse_string - 103 +103 bc_main - 97 +97 bc_num_ulong - 95 +95 bc_func_insert - 89 +89 bc_vm_sig - 88 +88 bc_program_prep - 88 +88 bc_parse_number - 88 +88 bc_array_expand - 88 +88 bc_num_subArrays - 84 +84 bc_num_compare - 84 +84 bc_lex_name - 83 +83 bc_args_lopt - 81 +81 bc_parse_pushIndex - 80 +80 bc_num_mul - 80 +80 bc_num_mod - 80 +80 bc_num_div - 80 +80 bc_vm_info - 76 +76 bc_program_name - 75 +75 bc_map_find - 71 +71 bc_lex_next - 71 +71 bc_num_printHex - 70 +70 bc_vec_concat - 68 +68 bc_num_shift - 68 +68 bc_num_extend - 68 +68 bc_program_index - 66 +66 bc_num_ulong2num - 66 +66 bc_num_retireMul - 66 +66 bc_parse_noElse - 65 +65 bc_vec_string - 64 +64 bc_parse_pushName - 63 +63 bc_parse_exprs - 60 +60 bc_err_ids - 58 +58 bc_result_free - 57 +57 bc_vec_npop - 55 +55 dc_parse_parse - 53 +53 bc_vec_push - 53 +53 bc_parse_free - 53 +53 bc_num_inv - 53 +53 dc_parse_register - 52 +52 dc_lex_regs - 52 +52 bc_lex_whitespace - 52 +52 bc_num_copy - 51 +51 bc_program_binOpRetire - 50 +50 bc_parse_ops - 50 +50 bc_map_index - 50 +50 bcg - 48 +48 bc_num_init - 48 +48 bc_parse_startBody - 47 +47 bc_num_pow - 47 +47 bc_vm_putchar - 46 +46 bc_vm_exit - 46 +46 bc_num_clean - 45 +45 bc_parse_addFunc - 44 +44 bc_vec_grow - 42 +42 bc_program_len - 42 +42 bc_num_truncate - 42 +42 bc_array_init - 42 +42 bc_parse_expression - 39 +39 bc_lex_lineComment - 39 +39 bc_num_expand - 38 +38 bc_vec_init - 37 +37 bc_vm_printf - 36 +36 bc_num_printNewline - 36 +36 bc_func_free - 35 +35 bc_sig_msg - 34 +34 bc_program_retire - 34 +34 bc_lex_assign - 34 +34 dc_parse_init - 33 +33 bc_parse_init - 33 +33 dc_sig_msg - 31 +31 bc_vec_expand - 30 +30 bc_num_ten - 30 +30 bc_num_one - 28 +28 bc_errs - 28 +28 bc_vec_free - 27 +27 bc_program_ops - 24 +24 bc_vm_puts - 23 +23 bc_num_printChar - 23 +23 bc_program_ready_msg - 22 +22 bc_vm_fflush - 21 +21 dc_main 77 97 +20 bc_parse_next_rel - 20 +20 bc_parse_next_read - 20 +20 bc_parse_next_print - 20 +20 bc_parse_next_param - 20 +20 bc_parse_next_for - 20 +20 bc_parse_next_expr - 20 +20 bc_parse_next_elem - 20 +20 bc_warn_fmt - 17 +17 bc_vec_pushByte - 15 +15 bc_string_free - 15 +15 bc_num_setToZero - 15 +15 bc_num_free - 15 +15 bc_lex_file - 15 +15 bc_id_free - 15 +15 bc_err_fmt - 15 +15 bc_vec_item_rev - 14 +14 bc_id_cmp - 12 +12 bc_num_zero - 11 +11 bc_vec_item - 9 +9 bc_program_stdin_name - 8 +8 bc_program_scale - 8 +8 bc_args_opt - 8 +8 bc_func_read - 7 +7 bc_func_main - 7 +7 bc_err_line - 7 +7 bc_lib_name - 4 +4 bc_args_env_name - 4 +4 applet_main 1604 1608 +4 dc_name - 3 +3 bc_name - 3 +3 applet_names 2781 2784 +3 static.bases 5 - -5 check_under 20 - -20 pop 24 - -24 print_no_pop 32 - -32 sub 34 - -34 divide 34 - -34 mul 37 - -37 add 37 - -37 push 38 - -38 print_stack_no_pop 40 - -40 not 72 - -72 set_output_base 95 - -95 or 103 - -103 eor 103 - -103 and 103 - -103 mod 105 - -105 stack_machine 116 - -116 operators 144 - -144 print_base 230 - -230 ------------------------------------------------------------------------------ (add/remove: 173/20 grow/shrink: 4/0 up/down: 38089/-1372) Total: 36717 bytes text data bss dec hex filename 950181 485 7296 957962 e9e0a busybox_old 989722 485 7344 997551 f38af busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05bc: new applet, throws warningGavin Howard
Signed-off-by: Gavin Howard <yzena.tech@gmail.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>