aboutsummaryrefslogtreecommitdiff
path: root/miscutils/bc.c
AgeCommit message (Collapse)Author
2018-12-07bc: replace G.eof with a special exit code of bc_vm_stdin()Denys Vlasenko
function old new delta bc_read_line 305 307 +2 bc_vm_run 701 689 -12 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/1 up/down: 2/-12) Total: -10 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-07bc: convert two macros to functions, unwing one complex max(a,min(b,c))Denys Vlasenko
function old new delta BC_NUM_AREQ - 45 +45 BC_NUM_MREQ - 33 +33 bc_num_rem 104 91 -13 bc_num_divmod 168 155 -13 bc_num_d 584 569 -15 bc_num_mul 80 62 -18 bc_num_mod 80 62 -18 bc_num_div 80 62 -18 bc_num_sub 112 77 -35 bc_num_add 112 77 -35 ------------------------------------------------------------------------------ (add/remove: 2/0 grow/shrink: 0/8 up/down: 78/-165) Total: -87 bytes text data bss dec hex filename 985526 485 7296 993307 f281b busybox_old 985439 485 7296 993220 f27c4 busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-07bc: do not perform domr limit checks when they can't work (e.g. on 32-bit ↵Denys Vlasenko
arches) Also, optimize printing of messages with fixed limit strings by including limits as strings. function old new delta bc_num_ulong 103 95 -8 bc_lex_number 296 281 -15 dc_lex_token 701 684 -17 bc_lex_name 90 73 -17 bc_num_shift 72 54 -18 bc_lex_token 1299 1280 -19 bc_parse_stmt 1868 1768 -100 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/7 up/down: 0/-194) Total: -194 bytes text data bss dec hex filename 985814 485 7296 993595 f293b busybox_old 985526 485 7296 993307 f281b busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-07bc: pull temporary into a registerDenys Vlasenko
function old new delta bc_num_ulong 103 95 -8 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-07bc: use more compact parsing data structuresDenys Vlasenko
function old new delta dc_lex_token 697 701 +4 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 common_parse_expr 62 40 -22 bc_parse_expr 49 24 -25 dc_lex_regs 52 13 -39 bc_parse_name 581 539 -42 bc_parse_expr_empty_ok 2157 2108 -49 dc_parse_insts 332 83 -249 dc_lex_tokens 364 91 -273 bc_parse_stmt 2261 1868 -393 ------------------------------------------------------------------------------ (add/remove: 0/7 grow/shrink: 1/8 up/down: 4/-1232) Total: -1228 bytes text data bss dec hex filename 987037 485 7296 994818 f2e02 busybox_old 985814 485 7296 993595 f293b busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-07bc: use only G_interrupt as interrupt flagDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-06bc: fix exit codes for FEATURE_CLEAN_UP=yDenys Vlasenko
$ echo 0/0 | ./busybox bc; echo $? bc: divide by zero 1 $ echo halt | ./busybox bc; echo $? 0 <------- was 1 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-06bc: correctly parse dc optionsDenys Vlasenko
function old new delta bc_vm_init - 821 +821 bc_vm_file - 226 +226 dc_main 41 187 +146 bc_main 41 73 +32 packed_usage 33076 33059 -17 bc_vm_run 1903 701 -1202 ------------------------------------------------------------------------------ (add/remove: 2/0 grow/shrink: 2/2 up/down: 1225/-1219) Total: 6 bytes text data bss dec hex filename 987046 485 7296 994827 f2e0b busybox_old 987037 485 7296 994818 f2e02 busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-06dc: fix "dc does_not_exist" SEGVingDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-06bc: code shrink - convert two macros to functionsDenys Vlasenko
function old new delta bc_program_printStream - 185 +185 bc_program_pushArray - 147 +147 bc_program_exec 4132 4219 +87 bc_vec_pop - 27 +27 bc_vec_top - 13 +13 bc_num_ulong 92 103 +11 bc_vm_run 1905 1903 -2 bc_vm_process 94 92 -2 bc_program_reset 72 70 -2 bc_program_prep 93 91 -2 bc_program_call 366 364 -2 bc_parse_startBody 47 45 -2 bc_parse_parse 464 462 -2 bc_parse_else 137 135 -2 bc_parse_body 118 116 -2 bc_program_num 1129 1125 -4 bc_parse_text 147 143 -4 bc_program_retire 40 35 -5 bc_program_print 778 773 -5 bc_program_modexp 746 741 -5 bc_program_pushVar 215 208 -7 bc_program_copyToVar 323 316 -7 bc_parse_operator 184 177 -7 bc_parse_noElse 65 56 -9 bc_program_binOpRetire 56 46 -10 bc_parse_stmt 2271 2261 -10 bc_program_execStr 543 528 -15 bc_program_assignStr 161 146 -15 bc_parse_expr_empty_ok 2178 2157 -21 bc_parse_endBody 420 375 -45 bc_program_asciify 464 - -464 ------------------------------------------------------------------------------ (add/remove: 4/1 grow/shrink: 2/24 up/down: 470/-651) Total: -181 bytes text data bss dec hex filename 987227 485 7296 995008 f2ec0 busybox_old 987046 485 7296 994827 f2e0b busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-06bc: make keyword POSIXness check more readableDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-06bc: move a function to reduce forward declarationsDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-06bc: small simplification in dc_lex_token()Denys Vlasenko
Pulling array element into a temporary, taking address of this temporary and copying it? That's much unnecessary work. function old new delta dc_lex_token 701 697 -4 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-06bc: add comment about BC_NUM_DEF_SIZEDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-06bc: fix for prev commitDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-06bc: do not needlessly use strcatDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-06bc: unbreak "BC only" and "DC only" configsDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-06dc: re-enable "tiny dc" implementationDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-06bc: reuse common stringDenys Vlasenko
text data bss dec hex filename 987232 485 7296 995013 f2ec5 busybox_old 987205 485 7296 994986 f2eaa busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-06bc: hook up line editing with history bufferDenys Vlasenko
function old new delta push_input_byte - 65 +65 bc_vm_run 1875 1905 +30 bc_read_line 303 305 +2 bc_num_binary 148 150 +2 bc_num_ulong 103 92 -11 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 3/1 up/down: 99/-11) Total: 88 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-06bc: add preparatory indent block, no code changesDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-06bc: if ^C handling is not selected, there is no interactive modeDenys Vlasenko
function old new delta packed_usage 33023 33076 +53 bc_num_s 252 246 -6 bc_vm_run 1859 1850 -9 bc_error_fmt 36 20 -16 bc_posix_error_fmt 58 41 -17 bc_read_line 202 168 -34 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/5 up/down: 53/-82) Total: -29 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-06bc: fix "bc -v" printing version info twice, and not exitingDenys Vlasenko
function old new delta bc_args 123 130 +7 bc_num_binary 150 148 -2 static.nullptr 4 - -4 bc_vm_run 1883 1874 -9 ------------------------------------------------------------------------------ (add/remove: 0/1 grow/shrink: 1/2 up/down: 7/-15) Total: -8 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-06bc: make bc_vm_envArgs() NULL-terminate its argv, simplify bc_vm_envLen()Denys Vlasenko
function old new delta bc_num_ulong 92 103 +11 static.nullptr - 4 +4 bc_args 120 123 +3 static.bc_args_env_name 4 - -4 dc_main 49 41 -8 bc_main 49 41 -8 bc_vm_run 1917 1883 -34 ------------------------------------------------------------------------------ (add/remove: 1/1 grow/shrink: 2/3 up/down: 18/-54) Total: -36 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-06bc: if FEATURE_CLEAN_UP, clean up allocations on exitsDenys Vlasenko
Will have exitcode 1 even on "quit" and "halt", is it a problem? Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05bc: do not allow "()" as a valid expressionDenys Vlasenko
function old new delta bc_parse_expr_empty_ok - 2178 +2178 bc_parse_expr 2178 49 -2129 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 0/1 up/down: 2178/-2129) Total: 49 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05bc: reorder functions, delete forward declarations, no code changes - part 2Denys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05bc: reorder functions, delete forward declarations, no code changesDenys Vlasenko
Pure block moves of text Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05bc: remove unused stringsDenys Vlasenko
text data bss dec hex filename 987088 485 7296 994869 f2e35 busybox_old 987079 485 7296 994860 f2e2c busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05bc: trivial simplification in bc_parse_return()Denys Vlasenko
function old new delta bc_parse_stmt 2276 2271 -5 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05bc: fix "warning: 's' may be used uninitialized in this function"Denys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05bc: code shrinkDenys Vlasenko
function old new delta bc_parse_expr 2151 2178 +27 bc_parse_exprs 60 - -60 ------------------------------------------------------------------------------ (add/remove: 0/1 grow/shrink: 2/0 up/down: 27/-60) Total: -33 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05bc: code shrinkDenys Vlasenko
function old new delta bc_parse_operator 181 184 +3 bc_parse_ops 50 25 -25 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/1 up/down: 3/-25) Total: -22 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05bc: make division operation interruptibleDenys Vlasenko
function old new delta bc_num_d 564 584 +20 bc_num_r 230 245 +15 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/0 up/down: 35/0) Total: 35 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05bc: use unsigned division by 10 instead of signedDenys Vlasenko
function old new delta bc_num_k 990 988 -2 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05bc: move ^C check fro power calculation to multiplicationDenys Vlasenko
function old new delta bc_num_k 971 990 +19 bc_num_p 507 478 -29 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/1 up/down: 19/-29) Total: -10 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05bc: bc_num_k(): move carry,i,j,len to inner scopeDenys Vlasenko
This might help compiler function old new delta bc_num_k 957 971 +14 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05bc: tweak error messagesDenys Vlasenko
function old new delta bc_lex_token 1285 1299 +14 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05bc: fix inverted POSIXness test, improve messages, commonalize message stringsDenys Vlasenko
function old new delta bc_lex_token 1251 1285 +34 bc_POSIX_does_not_allow_bool_ops_this_is_bad - 25 +25 bc_POSIX_does_not_allow_empty_X_expression_in_for - 20 +20 bc_POSIX_does_not_allow - 20 +20 bc_parse_expr 2146 2151 +5 bc_num_ulong 103 92 -11 ------------------------------------------------------------------------------ (add/remove: 3/0 grow/shrink: 2/1 up/down: 104/-11) Total: 93 bytes text data bss dec hex filename 987210 485 7296 994991 f2eaf busybox_old 987084 485 7296 994865 f2e31 busybox_unstripped ^^^^^^^ Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05bc: print error line numbersDenys Vlasenko
FILE: print 1 print " $ busybox bc -q FILE bc: FILE:2: string end could not be found ready for more input >>> _ function old new delta bc_verror_msg - 99 +99 bc_lex_file 12 28 +16 bc_lex_next 77 92 +15 dc_lex_token 687 701 +14 bc_lex_token 1237 1251 +14 bc_posix_error_fmt 90 58 -32 bc_error_fmt 70 36 -34 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 4/2 up/down: 158/-66) Total: 92 bytes text data bss dec hex filename 987108 485 7296 994889 f2e49 busybox_old 987210 485 7296 994991 f2eaf busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05bc: optimize pushing zero bytes to vectorsDenys Vlasenko
function old new delta bc_vec_pushZeroByte - 10 +10 bc_vm_run 1919 1917 -2 bc_vec_string 61 59 -2 bc_vec_concat 68 66 -2 bc_parse_create 170 168 -2 bc_lex_number 298 296 -2 dc_lex_token 691 687 -4 bc_read_line 314 303 -11 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 0/7 up/down: 10/-25) Total: -15 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05bc: restore printing of script name on errorsDenys Vlasenko
Examples: On stdin, no file name is available: $ echo 'print "' | busybox bc bc: string end could not be found When the same error is in file: $ busybox bc FILE bc 1.30.0.git Copyright (c) 2018 Gavin D. Howard and contributors Report bugs at: https://github.com/gavinhoward/bc This is free software with ABSOLUTELY NO WARRANTY FILE: string end could not be found ready for more input >>> Line number printing to be added later... function old new delta bc_error_fmt 38 70 +32 bc_posix_error_fmt 60 90 +30 bc_vm_run 1900 1919 +19 bc_program_read 338 355 +17 bc_lex_file 15 12 -3 bc_program_stdin_name 8 - -8 ------------------------------------------------------------------------------ (add/remove: 0/1 grow/shrink: 4/1 up/down: 98/-11) Total: 87 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05bc: do not check for errors when parsing/running internal libraryDenys Vlasenko
function old new delta bc_lib_name 4 - -4 bc_vm_run 1921 1900 -21 ------------------------------------------------------------------------------ (add/remove: 0/1 grow/shrink: 0/1 up/down: 0/-25) Total: -25 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05bc: shrink error handling code by enabling tail-call optimizationDenys Vlasenko
function old new delta bc_posix_error_fmt - 60 +60 bc_error_fmt - 38 +38 bc_error_bad_character - 17 +17 bc_parse_auto 302 313 +11 bc_num_ulong 93 103 +10 bc_error_variable_is_wrong_type - 10 +10 bc_error_stack_has_too_few_elements - 10 +10 bc_error_nested_read_call - 10 +10 bc_error_bad_token - 10 +10 bc_error_bad_expression - 10 +10 bc_num_d 561 564 +3 bc_program_assign 484 486 +2 dc_parse_parse 60 59 -1 bc_program_num 1130 1129 -1 bc_program_call 367 366 -1 bc_parse_stmt 2277 2276 -1 bc_lex_number 299 298 -1 bc_lex_name 91 90 -1 bc_func_insert 98 97 -1 bc_num_shift 74 72 -2 bc_vm_run 1924 1921 -3 bc_parse_endBody 424 420 -4 bc_lex_next 81 77 -4 bc_program_read 343 338 -5 bc_program_asciify 469 464 -5 bc_program_pushVar 221 215 -6 bc_program_print 784 778 -6 bc_program_prep 99 93 -6 bc_program_assignStr 167 161 -6 bc_parse_else 143 137 -6 bc_parse_body 124 118 -6 dc_parse_register 61 53 -8 dc_lex_token 699 691 -8 bc_program_modexp 756 746 -10 bc_parse_name 593 581 -12 dc_parse_expr 775 762 -13 bc_program_copyToVar 336 323 -13 bc_program_binOpPrep 324 311 -13 bc_program_execStr 561 543 -18 bc_program_exec 4150 4132 -18 bc_parse_parse 483 464 -19 bc_error 38 14 -24 bc_lex_token 1266 1237 -29 bc_posix_error 60 14 -46 bc_parse_expr 2194 2146 -48 ------------------------------------------------------------------------------ (add/remove: 8/0 grow/shrink: 4/33 up/down: 191/-345) Total: -154 bytes text data bss dec hex filename 987226 485 7296 995007 f2ebf busybox_old 987072 485 7296 994853 f2e25 busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05bc: make 2^1000000 interruptible fasterDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05bc: remove tabs from internal libraryDenys Vlasenko
function old new delta bc_lib 1877 1674 -203 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05bc: store library in ASCII, shrink keyword parsing codeDenys Vlasenko
Also, use ARRAY_SIZE() where appropriate function old new delta bc_lib 1878 1877 -1 bc_program_index 66 64 -2 bc_lex_token 1282 1266 -16 bc_lex_kws 220 160 -60 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/4 up/down: 0/-79) Total: -79 bytes text data bss dec hex filename 987518 485 7296 995299 f2fe3 busybox_old 987440 485 7296 995221 f2f95 busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05bc: drop bc_map_init() macroDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05bc: create a few common functionsDenys Vlasenko
function old new delta bc_char_vec_init - 12 +12 bc_vec_pop_all - 8 +8 bc_program_index 64 66 +2 bc_vec_string 64 61 -3 bc_vec_free 27 24 -3 bc_read_line 317 314 -3 bc_program_execStr 564 561 -3 bc_program_exec 4153 4150 -3 bc_program_copyToVar 340 336 -4 bc_parse_create 175 170 -5 dc_lex_token 705 699 -6 bc_program_reset 78 72 -6 bc_lex_number 305 299 -6 bc_program_read 353 343 -10 bc_program_addFunc 225 209 -16 bc_vm_run 1942 1924 -18 bc_parse_reset 181 163 -18 ------------------------------------------------------------------------------ (add/remove: 2/0 grow/shrink: 1/14 up/down: 22/-104) Total: -82 bytes text data bss dec hex filename 987600 485 7296 995381 f3035 busybox_old 987518 485 7296 995299 f2fe3 busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05bc: rewrite "BOOL * EXPR" idiom as if() statementDenys Vlasenko
function old new delta bc_program_index 66 64 -2 bc_program_num 1147 1130 -17 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-19) Total: -19 bytes text data bss dec hex filename 987619 485 7296 995400 f3048 busybox_old 987600 485 7296 995381 f3035 busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>