Commit Graph

217 Commits

Author SHA1 Message Date
Denys Vlasenko
1f67e935ac bc: reduce forward declarations
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
d9d66556d7 bc: use smaller datatypes for limits, match GNU bc 'limits' output
function                                             old     new   delta
bc_vm_process                                        315     291     -24
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-24)             Total: -24 bytes
   text	   data	    bss	    dec	    hex	filename
 988303	    485	   7296	 996084	  f32f4	busybox_old
 988273	    485	   7296	 996054	  f32d6	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
416ce76bcd bc: better handle optional args of bc_program_pushVar()
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
9721f6c8b0 bc: tweak help text
-v is supported but not shown

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
a0c421c118 bc: simplify bc_vm_stdin()
function                                             old     new   delta
bc_vm_run                                           2020    2006     -14

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
71e1fc6b37 bc: only check for ^C in bc_program_exec() main loop
Checking it in individual operations such as SQRT is not necessary
since they usually do not take very long to complete. We repeatedly return
to main loop.

TODO: re-add more fine-grained ^C checks - but only with examples where it is
actually needed. E.g. I suspect simplest ops like addition or compare won't need it.

function                                             old     new   delta
bc_program_index                                      66      64      -2
bc_num_s                                             258     246     -12
bc_num_cmp                                           294     275     -19
bc_num_compare                                        84      59     -25
bc_num_subArrays                                      74      47     -27
bc_num_a                                             474     445     -29
bc_program_exec                                     4530    4500     -30
bc_num_p                                             518     472     -46
bc_num_d                                             604     558     -46
bc_num_k                                            1005     957     -48
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/10 up/down: 0/-284)          Total: -284 bytes
   text	   data	    bss	    dec	    hex	filename
 988601	    485	   7296	 996382	  f341e	busybox_old
 988317	    485	   7296	 996098	  f3302	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
df51539ed0 bc: simpler calling convention for bc_read_file(), bc_program_search()
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-05 15:43:35 +01:00
Denys Vlasenko
e3b4f23cf3 bc: bc_num_ulong2num(), bc_program_pushGlobal(), bc_program_stackLen() never 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-05 15:43:35 +01:00
Denys Vlasenko
a1d3ca2455 bc: stop passing around pointers to G.prog, they are all constant
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-05 15:43:35 +01:00
Denys Vlasenko
f6c1da5ff3 bc: select parse_init() and parse_expr() using IS_BC, not function pointers
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-05 15:43:35 +01:00
Denys Vlasenko
785e4b3057 bc: propagate fixed arguments into callees
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-05 15:43:35 +01:00
Denys Vlasenko
ab3c568fd8 bc: simplify ^C handling
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-05 15:43:35 +01:00
Denys Vlasenko
6d9146ab56 bc: convert to "G trick" - this returns bc to zero bss increase
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-05 15:43:35 +01:00
Denys Vlasenko
5a9fef5b59 bc: simplify, and restore ^C, fix ^D handling
^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-05 15:43:35 +01:00
Denys Vlasenko
00d7779a35 bc: simplify, stop testing for IO errors on every output
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-05 15:42:52 +01:00
Denys Vlasenko
ef869ec728 bc: fix warnings, initial cleanups
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-05 15:42:48 +01:00
Gavin Howard
01055ba89a bc: new applet, throws warning
Signed-off-by: Gavin Howard <yzena.tech@gmail.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:40:38 +01:00