oweals/busybox.git
5 years agobc: move functions/macros around, no code changes
Denys Vlasenko [Mon, 24 Dec 2018 04:00:36 +0000 (05:00 +0100)]
bc: move functions/macros around, no code changes

Order now is:
enums/structures/defines,
utility/common functions,
parsing,
execution,
main loop,
main()

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: rename common INST constants to XC_, dc-specific ones to DC_
Denys Vlasenko [Mon, 24 Dec 2018 03:26:07 +0000 (04:26 +0100)]
bc: rename common INST constants to XC_, dc-specific ones to DC_

This will assist in disentangling dc and bc LEX constants

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agodc: without -x, do not parse extended regs: 's p' means: store to ' ' reg, print
Denys Vlasenko [Mon, 24 Dec 2018 00:53:55 +0000 (01:53 +0100)]
dc: without -x, do not parse extended regs: 's p' means: store to ' ' reg, print

function                                             old     new   delta
zbc_lex_next                                        2240    2233      -7
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-7)               Total: -7 bytes
   text    data     bss     dec     hex filename
 981437     485    7296  989218   f1822 busybox_old
 981412     485    7296  989193   f1809 busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: fix incorrect bit in BC_PARSE_EXPRS_BITS: 'limits' is not allowed
Denys Vlasenko [Mon, 24 Dec 2018 00:02:59 +0000 (01:02 +0100)]
bc: fix incorrect bit in BC_PARSE_EXPRS_BITS: 'limits' is not allowed

Alsl, move and rename dc_lex_tokens[] to dc_char_to_LEX[]

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: for "dc only" remove handling of LAST, move OBASE enums up to IBASE
Denys Vlasenko [Sun, 23 Dec 2018 23:50:32 +0000 (00:50 +0100)]
bc: for "dc only" remove handling of LAST, move OBASE enums up to IBASE

function                                             old     new   delta
dc_LEX_to_INST                                         -      82     +82
bc_parse_pushNUM                                       -      62     +62
zbc_program_num                                      981     978      -3
bc_result_free                                        46      43      -3
zbc_program_binOpPrep                                305     300      -5
static.msg                                            24      12     -12
zbc_program_exec                                    4013    3994     -19
zdc_parse_expr                                       583     507     -76
dc_parse_insts                                        83       -     -83
------------------------------------------------------------------------------
(add/remove: 2/1 grow/shrink: 0/6 up/down: 144/-201)          Total: -57 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: fix empty lines in dc generating "bad token" message
Denys Vlasenko [Sat, 22 Dec 2018 23:13:15 +0000 (00:13 +0100)]
bc: fix empty lines in dc generating "bad token" message

function                                             old     new   delta
zdc_program_asciify                                    -     370    +370
zbc_program_pushArray                                  -     147    +147
zbc_vm_process                                       824     828      +4
zbc_program_exec                                    4182    4046    -136
zdc_program_printStream                              146       -    -146
zbc_program_read                                     268       -    -268
------------------------------------------------------------------------------
(add/remove: 2/2 grow/shrink: 1/1 up/down: 521/-550)          Total: -29 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: shrink modular exponentiation code
Denys Vlasenko [Sat, 22 Dec 2018 22:59:21 +0000 (23:59 +0100)]
bc: shrink modular exponentiation code

function                                             old     new   delta
zdc_program_modexp                                   721     694     -27

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: do not yet allow 2^2.1
Denys Vlasenko [Sat, 22 Dec 2018 22:14:48 +0000 (23:14 +0100)]
bc: do not yet allow 2^2.1

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: avoid having to twiddle b->neg in zbc_num_p()
Denys Vlasenko [Sat, 22 Dec 2018 20:52:30 +0000 (21:52 +0100)]
bc: avoid having to twiddle b->neg in zbc_num_p()

function                                             old     new   delta
zbc_num_ulong_abs                                      -      70     +70
zbc_num_p                                            424     413     -11
zbc_num_ulong                                         81      21     -60
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 0/2 up/down: 70/-71)             Total: -1 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: do not disallow powers to N.0000 degree - it's even shorter code
Denys Vlasenko [Sat, 22 Dec 2018 20:45:18 +0000 (21:45 +0100)]
bc: do not disallow powers to N.0000 degree - it's even shorter code

function                                             old     new   delta
zbc_num_p                                            440     424     -16

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: shrink zbc_num_ulong()
Denys Vlasenko [Sat, 22 Dec 2018 20:37:46 +0000 (21:37 +0100)]
bc: shrink zbc_num_ulong()

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: make long-running dc drop data it does not need (when it can)
Denys Vlasenko [Sat, 22 Dec 2018 18:23:46 +0000 (19:23 +0100)]
bc: make long-running dc drop data it does not need (when it can)

function                                             old     new   delta
zbc_vm_process                                       765     824     +59

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: unbreak "z function" macro machinery
Denys Vlasenko [Sat, 22 Dec 2018 17:24:19 +0000 (18:24 +0100)]
bc: unbreak "z function" macro machinery

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agodc: unbreak interactive mode - was trying to get next tokens instead of executing
Denys Vlasenko [Sat, 22 Dec 2018 17:04:08 +0000 (18:04 +0100)]
dc: unbreak interactive mode - was trying to get next tokens instead of executing

function                                             old     new   delta
zbc_program_read                                       -     268    +268
zdc_program_printStream                                -     146    +146
zbc_program_exec                                    4046    4182    +136
zdc_program_execStr                                  472     512     +40
zdc_parse_exprs_until_eof                              -      26     +26
zbc_vm_process                                       740     765     +25
zbc_lex_next                                        2225    2240     +15
zdc_parse_expr                                       569     535     -34
zbc_program_pushArray                                147       -    -147
zdc_program_asciify                                  370       -    -370
------------------------------------------------------------------------------
(add/remove: 3/2 grow/shrink: 4/1 up/down: 656/-551)          Total: 105 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: move zbc_lex_next() out of zdc_parse_string() and zdc_parse_mem()
Denys Vlasenko [Sat, 22 Dec 2018 15:40:38 +0000 (16:40 +0100)]
bc: move zbc_lex_next() out of zdc_parse_string() and zdc_parse_mem()

function                                             old     new   delta
zdc_parse_mem                                         99      93      -6
zdc_parse_expr                                       586     569     -17
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-23)             Total: -23 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: shorten sanity-check code
Denys Vlasenko [Sat, 22 Dec 2018 13:18:47 +0000 (14:18 +0100)]
bc: shorten sanity-check code

function                                             old     new   delta
zbc_vm_process                                       745     740      -5

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: fold single-callsite functions into callers, commonalize code
Denys Vlasenko [Sat, 22 Dec 2018 05:00:25 +0000 (06:00 +0100)]
bc: fold single-callsite functions into callers, commonalize code

function                                             old     new   delta
zbc_vm_process                                       699     745     +46
zbc_parse_stmt_possibly_auto                        1689    1682      -7
bc_parse_reset                                       113       -    -113
------------------------------------------------------------------------------
(add/remove: 0/1 grow/shrink: 1/1 up/down: 46/-120)           Total: -74 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: zcommon_parse_expr() has only one user, fold it in
Denys Vlasenko [Sat, 22 Dec 2018 02:38:52 +0000 (03:38 +0100)]
bc: zcommon_parse_expr() has only one user, fold it in

function                                             old     new   delta
zbc_program_exec                                    4021    4046     +25
zdc_parse_expr                                       589     586      -3
zcommon_parse_expr                                    28       -     -28
------------------------------------------------------------------------------
(add/remove: 0/1 grow/shrink: 1/1 up/down: 25/-31)             Total: -6 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: zcommon_parse_expr() lost its flags argument
Denys Vlasenko [Sat, 22 Dec 2018 01:30:18 +0000 (02:30 +0100)]
bc: zcommon_parse_expr() lost its flags argument

function                                             old     new   delta
zcommon_parse_expr                                     -      28     +28
zdc_program_execStr                                  474     472      -2
zbc_program_exec                                    4023    4021      -2
common_parse_expr                                     29       -     -29
------------------------------------------------------------------------------
(add/remove: 1/1 grow/shrink: 0/2 up/down: 28/-33)             Total: -5 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: stop using BC_PARSE_NOCALL in dc code
Denys Vlasenko [Sat, 22 Dec 2018 01:23:08 +0000 (02:23 +0100)]
bc: stop using BC_PARSE_NOCALL in dc code

function                                             old     new   delta
zdc_program_execStr                                  465     474      +9
zbc_vm_process                                       701     699      -2
common_parse_expr                                     32      29      -3
zdc_parse_expr                                       615     586     -29
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/3 up/down: 9/-34)             Total: -25 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: unbreak read(), remove checks for nested read()
Denys Vlasenko [Sat, 22 Dec 2018 00:34:10 +0000 (01:34 +0100)]
bc: unbreak read(), remove checks for nested read()

function                                             old     new   delta
zbc_parse_pushSTR                                      -      65     +65
common_parse_expr                                      -      32     +32
bc_error_nested_read_call                             10       -     -10
bc_parse_expr_empty_ok                              1977    1963     -14
zdc_parse_expr                                       635     615     -20
zcommon_parse_expr                                    32       -     -32
zbc_program_exec                                    4064    4023     -41
bc_parse_pushSTR                                      65       -     -65
------------------------------------------------------------------------------
(add/remove: 2/3 grow/shrink: 0/3 up/down: 97/-182)           Total: -85 bytes
   text    data     bss     dec     hex filename
 981661     485    7296  989442   f1902 busybox_old
 981540     485    7296  989321   f1889 busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: code shrink
Denys Vlasenko [Fri, 21 Dec 2018 22:13:48 +0000 (23:13 +0100)]
bc: code shrink

function                                             old     new   delta
bc_result_pop_and_push                                 -      73     +73
zbc_program_exec                                    4068    4064      -4
bc_program_binOpRetire                                46      32     -14
zdc_program_assignStr                                146     126     -20
zdc_program_asciify                                  395     370     -25
bc_program_retire                                     35       7     -28
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 0/5 up/down: 73/-91)            Total: -18 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: rename BcInstPtr::idx and ::len
Denys Vlasenko [Fri, 21 Dec 2018 22:01:26 +0000 (23:01 +0100)]
bc: rename BcInstPtr::idx and ::len

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: remove unnecessary initializations
Denys Vlasenko [Fri, 21 Dec 2018 21:43:53 +0000 (22:43 +0100)]
bc: remove unnecessary initializations

function                                             old     new   delta
zdc_program_asciify                                  403     395      -8
zbc_program_print                                    691     683      -8
zbc_program_exec                                    4079    4068     -11
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/3 up/down: 0/-27)             Total: -27 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: use non-allocated BcNum's where appropriate
Denys Vlasenko [Fri, 21 Dec 2018 21:36:04 +0000 (22:36 +0100)]
bc: use non-allocated BcNum's where appropriate

function                                             old     new   delta
zbc_num_printNum                                     540     543      +3
zdc_program_asciify                                  407     403      -4
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/1 up/down: 3/-4)               Total: -1 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: optimize bc_vec_push() usage
Denys Vlasenko [Fri, 21 Dec 2018 21:16:17 +0000 (22:16 +0100)]
bc: optimize bc_vec_push() usage

function                                             old     new   delta
bc_parse_pushNUM                                      87      80      -7
zbc_parse_stmt_possibly_auto                        1697    1689      -8
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-15)             Total: -15 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: fix for() to not leave data on stack
Denys Vlasenko [Fri, 21 Dec 2018 19:29:34 +0000 (20:29 +0100)]
bc: fix for() to not leave data on stack

function                                             old     new   delta
zbc_parse_stmt_possibly_auto                        1665    1697     +32
zbc_vm_process                                       672     701     +29
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/0 up/down: 61/0)               Total: 61 bytes
   text    data     bss     dec     hex filename
 981656     485    7296  989437   f18fd busybox_old
 981748     485    7296  989529   f1959 busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: fix infinite state growth for "yes 1 | bc" case
Denys Vlasenko [Fri, 21 Dec 2018 15:22:26 +0000 (16:22 +0100)]
bc: fix infinite state growth for "yes 1 | bc" case

function                                             old     new   delta
zbc_vm_process                                       585     672     +87
bc_func_init                                          50      86     +36
zbc_program_num                                      990    1022     +32
bc_program_str                                        17      47     +30
bc_program_current_func                                -      22     +22
bc_parse_pushNUM                                      66      87     +21
bc_func_free                                          27      43     +16
zbc_num_binary                                       145     147      +2
bc_program_reset                                      64      61      -3
bc_parse_pushSTR                                      73      65      -8
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 7/2 up/down: 246/-11)           Total: 235 bytes
   text    data     bss     dec     hex filename
 981393     485    7296  989174   f17f6 busybox_old
 981656     485    7296  989437   f18fd busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: fix comment
Denys Vlasenko [Thu, 20 Dec 2018 23:39:02 +0000 (00:39 +0100)]
bc: fix comment

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: for(;;) fix from upstream
Denys Vlasenko [Thu, 20 Dec 2018 23:35:22 +0000 (00:35 +0100)]
bc: for(;;) fix from upstream

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: shrink bc_program_add_fn()
Denys Vlasenko [Thu, 20 Dec 2018 23:10:26 +0000 (00:10 +0100)]
bc: shrink bc_program_add_fn()

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: "dc only" config does not need G.prog.fn_map
Denys Vlasenko [Thu, 20 Dec 2018 19:34:09 +0000 (20:34 +0100)]
bc: "dc only" config does not need G.prog.fn_map

function                                             old     new   delta
bc_program_add_fn                                      -      43     +43
bc_vm_init                                           655     675     +20
bc_program_addFunc                                   138     118     -20
zdc_parse_expr                                       658     635     -23
zdc_program_asciify                                  447     407     -40
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 1/3 up/down: 63/-83)            Total: -20 bytes
   text    data     bss     dec     hex filename
 984739     489    7312  992540   f251c busybox_old
 984712     489    7312  992513   f2501 busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: fix keyword matching to not think "ifz" is the "if" keyword
Denys Vlasenko [Thu, 20 Dec 2018 15:48:50 +0000 (16:48 +0100)]
bc: fix keyword matching to not think "ifz" is the "if" keyword

function                                             old     new   delta
zbc_lex_next                                        2224    2225      +1

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: shrink "dc only" code by dropping unused structure members
Denys Vlasenko [Thu, 20 Dec 2018 15:24:18 +0000 (16:24 +0100)]
bc: shrink "dc only" code by dropping unused structure members

function                                             old     new   delta
zbc_program_num                                      979     981      +2
zbc_program_pushArray                                147     145      -2
bc_program_pushVar                                   198     196      -2
bc_program_func                                       17      15      -2
dc_num_printChar                                      24      21      -3
bc_program_retire                                     35      32      -3
bc_program_binOpRetire                                46      43      -3
zdc_program_printStream                              153     148      -5
zbc_program_prep                                      91      86      -5
zbc_program_copyToVar                                300     295      -5
zdc_program_modexp                                   721     715      -6
zbc_program_binOpPrep                                311     305      -6
bc_program_addFunc                                   138     132      -6
bc_num_printNewline                                   51      45      -6
bc_num_printHex                                       67      61      -6
bc_num_printDigits                                   137     131      -6
zdc_program_assignStr                                146     137      -9
bc_program_reset                                      64      55      -9
bc_func_free                                          27       5     -22
bc_parse_free                                         38       8     -30
bc_parse_create                                       92      47     -45
bc_func_init                                          50       5     -45
dc_main                                              691     645     -46
zdc_program_execStr                                  496     442     -54
zbc_program_print                                    677     623     -54
zbc_vm_process                                       204     137     -67
zbc_program_exec                                    4132    4057     -75
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/26 up/down: 2/-522)          Total: -520 bytes
   text    data     bss     dec     hex filename
 969767     485    7296  977548   eea8c busybox_old
 969210     485    7296  976991   ee85f busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: shorten bc_program_addFunc()
Denys Vlasenko [Wed, 19 Dec 2018 19:05:50 +0000 (20:05 +0100)]
bc: shorten bc_program_addFunc()

function                                             old     new   delta
bc_func_init                                           -      50     +50
bc_program_addFunc                                   201     138     -63
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 0/1 up/down: 50/-63)            Total: -13 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: fix "dc only" and "bc only" configs
Denys Vlasenko [Wed, 19 Dec 2018 18:43:03 +0000 (19:43 +0100)]
bc: fix "dc only" and "bc only" configs

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: rename dc-specific functions, simplify zdc_program_execStr() a bit
Denys Vlasenko [Wed, 19 Dec 2018 18:35:40 +0000 (19:35 +0100)]
bc: rename dc-specific functions, simplify zdc_program_execStr() a bit

function                                             old     new   delta
zbc_program_execStr                                  496       -    -496
zdc_program_execStr                                    -     491    +491

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: rename zbc_parse_string->bc_parse_pushSTR, do not emit next opcode in it
Denys Vlasenko [Wed, 19 Dec 2018 18:10:40 +0000 (19:10 +0100)]
bc: rename zbc_parse_string->bc_parse_pushSTR, do not emit next opcode in it

function                                             old     new   delta
bc_parse_pushSTR                                       -      73     +73
zbc_parse_stmt_possibly_auto                        1638    1640      +2
zbc_parse_string                                      89       -     -89
------------------------------------------------------------------------------
(add/remove: 1/1 grow/shrink: 1/0 up/down: 75/-89)            Total: -14 bytes
   text    data     bss     dec     hex filename
 981377     485    7296  989158   f17e6 busybox_old
 981363     485    7296  989144   f17d8 busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: avoid bc_vec_item() calls in bc_vm_run()
Denys Vlasenko [Wed, 19 Dec 2018 17:09:31 +0000 (18:09 +0100)]
bc: avoid bc_vec_item() calls in bc_vm_run()

function                                             old     new   delta
bc_vm_run                                            124     112     -12

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: avoid bc_vec_item() calls in bc_array_copy()
Denys Vlasenko [Wed, 19 Dec 2018 16:59:30 +0000 (17:59 +0100)]
bc: avoid bc_vec_item() calls in bc_array_copy()

function                                             old     new   delta
zbc_program_copyToVar                                311     300     -11

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: avoid successive bc_vec_item(&func->autos, i)
Denys Vlasenko [Wed, 19 Dec 2018 16:55:23 +0000 (17:55 +0100)]
bc: avoid successive bc_vec_item(&func->autos, i)

function                                             old     new   delta
zbc_func_insert                                       97     100      +3
zbc_program_call                                     353     354      +1
zbc_program_exec                                    4085    4078      -7
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/1 up/down: 4/-7)               Total: -3 bytes
   text    data     bss     dec     hex filename
 981403     485    7296  989184   f1800 busybox_old
 981400     485    7296  989181   f17fd busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: remove unnecessary union use
Denys Vlasenko [Wed, 19 Dec 2018 16:15:04 +0000 (17:15 +0100)]
bc: remove unnecessary union use

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: "unsigned_n > 0" is shorter code than "unsigned_n >= 1"
Denys Vlasenko [Wed, 19 Dec 2018 16:09:01 +0000 (17:09 +0100)]
bc: "unsigned_n > 0" is shorter code than "unsigned_n >= 1"

function                                             old     new   delta
zbc_program_print                                    680     677      -3
zbc_program_exec                                    4089    4085      -4
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-7)               Total: -7 bytes
   text    data     bss     dec     hex filename
 981404     485    7296  989185   f1801 busybox_old
 981397     485    7296  989178   f17fa busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: open-code bc_parse_updateFunc() macro
Denys Vlasenko [Wed, 19 Dec 2018 14:13:14 +0000 (15:13 +0100)]
bc: open-code bc_parse_updateFunc() macro

This clearly shows one place which would need changing
for nested funcdefs to work.

function                                             old     new   delta
bc_parse_reset                                       106     110      +4
zbc_vm_process                                       586     585      -1
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/1 up/down: 4/-1)                Total: 3 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: make bc_program_addFunc() return new idx, untangle &p->fidx interaction
Denys Vlasenko [Wed, 19 Dec 2018 13:57:23 +0000 (14:57 +0100)]
bc: make bc_program_addFunc() return new idx, untangle &p->fidx interaction

In:
       bc_program_addFunc(name, idx);
       p->func = bc_program_func(p->fidx);
in some cases p->fidx was updated by _first_ statement - because passed idx
was pointing at it. This was very obscure.

function                                             old     new   delta
zdc_parse_expr                                       653     658      +5
bc_program_addFunc                                   204     201      -3
zbc_vm_process                                       594     586      -8
bc_vm_init                                           663     655      -8
zbc_parse_name                                       482     472     -10
bc_parse_addFunc                                      25       -     -25
zbc_program_asciify                                  473     447     -26
------------------------------------------------------------------------------
(add/remove: 0/1 grow/shrink: 1/5 up/down: 5/-80)             Total: -75 bytes
   text    data     bss     dec     hex filename
 981482     485    7296  989263   f184f busybox_old
 981401     485    7296  989182   f17fe busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: "reload stack only after insts" change missed a few places
Denys Vlasenko [Wed, 19 Dec 2018 13:02:59 +0000 (14:02 +0100)]
bc: "reload stack only after insts" change missed a few places

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: rename a few functions
Denys Vlasenko [Wed, 19 Dec 2018 12:55:53 +0000 (13:55 +0100)]
bc: rename a few functions

function                                             old     new   delta
bc_map_find_ge                                         -      71     +71
bc_map_find_exact                                      -      50     +50
bc_map_index                                          50       -     -50
bc_map_find                                           71       -     -71
------------------------------------------------------------------------------
(add/remove: 2/2 grow/shrink: 0/0 up/down: 121/-121)            Total: 0 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: remove redundant strdup+free in zbc_parse_call()
Denys Vlasenko [Wed, 19 Dec 2018 12:19:44 +0000 (13:19 +0100)]
bc: remove redundant strdup+free in zbc_parse_call()

function                                             old     new   delta
zbc_parse_name                                       527     482     -45
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-45)             Total: -45 bytes
   text    data     bss     dec     hex filename
 981541     485    7296  989322   f188a busybox_old
 981486     485    7296  989267   f1853 busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: delete G.prog.strmb for real
Denys Vlasenko [Wed, 19 Dec 2018 11:47:45 +0000 (12:47 +0100)]
bc: delete G.prog.strmb for real

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: in execution loop, reload stack only after insts which can change it
Denys Vlasenko [Wed, 19 Dec 2018 11:35:27 +0000 (12:35 +0100)]
bc: in execution loop, reload stack only after insts which can change it

Only these functions affect G.prog.exestack:
zbc_program_read
zbc_program_call
zbc_program_return
zbc_program_nquit
zbc_program_execStr

function                                             old     new   delta
zbc_program_exec                                    3995    4093     +98
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/0 up/down: 98/0)               Total: 98 bytes
   text    data     bss     dec     hex filename
 981364     485    7296  989145   f17d9 busybox_old
 981462     485    7296  989243   f183b busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: simplify bc_array_expand()
Denys Vlasenko [Tue, 18 Dec 2018 19:10:48 +0000 (20:10 +0100)]
bc: simplify bc_array_expand()

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: code shrink
Denys Vlasenko [Tue, 18 Dec 2018 18:20:04 +0000 (19:20 +0100)]
bc: code shrink

function                                             old     new   delta
zbc_program_print                                    684     680      -4
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-4)               Total: -4 bytes
   text    data     bss     dec     hex filename
 981368     485    7296  989149   f17dd busybox_old
 981364     485    7296  989145   f17d9 busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: code shrink
Denys Vlasenko [Tue, 18 Dec 2018 18:17:11 +0000 (19:17 +0100)]
bc: code shrink

function                                             old     new   delta
bc_program_name                                       67      63      -4
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-4)               Total: -4 bytes
   text    data     bss     dec     hex filename
 981372     485    7296  989153   f17e1 busybox_old
 981368     485    7296  989149   f17dd busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: shrink bc_program_pushVar()
Denys Vlasenko [Tue, 18 Dec 2018 16:14:34 +0000 (17:14 +0100)]
bc: shrink bc_program_pushVar()

function                                             old     new   delta
bc_program_pushVar                                   203     198      -5

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: get rid of G.prog.ob, G.prog.strmb
Denys Vlasenko [Tue, 18 Dec 2018 16:00:35 +0000 (17:00 +0100)]
bc: get rid of G.prog.ob, G.prog.strmb

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>
5 years agobc: do not show -i in --help, it's a NOP (for now)
Denys Vlasenko [Tue, 18 Dec 2018 15:32:25 +0000 (16:32 +0100)]
bc: do not show -i in --help, it's a NOP (for now)

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: style edit, no code changes
Denys Vlasenko [Tue, 18 Dec 2018 15:24:07 +0000 (16:24 +0100)]
bc: style edit, no code changes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: shrink bc_program_index()
Denys Vlasenko [Tue, 18 Dec 2018 14:49:42 +0000 (15:49 +0100)]
bc: shrink bc_program_index()

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>
5 years agobc: fix "echo -n '#foo' | bc" not eating last 'o'
Denys Vlasenko [Tue, 18 Dec 2018 13:37:16 +0000 (14:37 +0100)]
bc: fix "echo -n '#foo' | bc" not eating last 'o'

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>
5 years agobc: shrink zdc_parse_expr()
Denys Vlasenko [Tue, 18 Dec 2018 13:11:35 +0000 (14:11 +0100)]
bc: shrink zdc_parse_expr()

function                                             old     new   delta
zdc_parse_expr                                       656     653      -3

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: optimize zbc_lex_string()
Denys Vlasenko [Tue, 18 Dec 2018 13:03:20 +0000 (14:03 +0100)]
bc: optimize zbc_lex_string()

function                                             old     new   delta
zbc_lex_next                                        2359    2353      -6

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: shrink zdc_lex_string()
Denys Vlasenko [Tue, 18 Dec 2018 12:48:37 +0000 (13:48 +0100)]
bc: shrink zdc_lex_string()

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>
5 years agobc: another for() loop simplified
Denys Vlasenko [Tue, 18 Dec 2018 12:22:23 +0000 (13:22 +0100)]
bc: another for() loop simplified

function                                             old     new   delta
zbc_program_print                                    688     686      -2

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: simplify another for() loop
Denys Vlasenko [Tue, 18 Dec 2018 12:15:55 +0000 (13:15 +0100)]
bc: simplify another for() loop

function                                             old     new   delta
zbc_num_d                                            563     557      -6

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: rewrite more for() loops
Denys Vlasenko [Tue, 18 Dec 2018 11:55:40 +0000 (12:55 +0100)]
bc: rewrite more for() loops

function                                             old     new   delta
bc_program_name                                       75      67      -8

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: rewrite another for() loop
Denys Vlasenko [Tue, 18 Dec 2018 11:43:21 +0000 (12:43 +0100)]
bc: rewrite another for() loop

function                                             old     new   delta
zbc_num_d                                            570     563      -7

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: replace signed division / 10 by unsigned
Denys Vlasenko [Tue, 18 Dec 2018 11:23:16 +0000 (12:23 +0100)]
bc: replace signed division / 10 by unsigned

function                                             old     new   delta
zbc_num_a                                            443     441      -2

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: rewrite bc_num_compare() to be readable
Denys Vlasenko [Mon, 17 Dec 2018 23:39:24 +0000 (00:39 +0100)]
bc: rewrite bc_num_compare() to be readable

function                                             old     new   delta
bc_num_compare                                        59      51      -8

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: fold zbc_num_stream() into its single caller
Denys Vlasenko [Mon, 17 Dec 2018 20:14:05 +0000 (21:14 +0100)]
bc: fold zbc_num_stream() into its single caller

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: get rid of BcNum BcProgram::ib,hexb
Denys Vlasenko [Mon, 17 Dec 2018 20:05:09 +0000 (21:05 +0100)]
bc: get rid of BcNum BcProgram::ib,hexb

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>
5 years agobc: fixes to bugs found while testing 64-bit build
Denys Vlasenko [Tue, 18 Dec 2018 02:16:48 +0000 (03:16 +0100)]
bc: fixes to bugs found while testing 64-bit build

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: fixed from 64-bit compile
Denys Vlasenko [Tue, 18 Dec 2018 01:23:53 +0000 (02:23 +0100)]
bc: fixed from 64-bit compile

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agoudhcpc: check that 4-byte options are indeed 4-byte, closes 11506
Denys Vlasenko [Mon, 17 Dec 2018 17:07:18 +0000 (18:07 +0100)]
udhcpc: check that 4-byte options are indeed 4-byte, closes 11506

function                                             old     new   delta
udhcp_get_option32                                     -      27     +27
udhcp_get_option                                     231     248     +17
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 1/0 up/down: 44/0)               Total: 44 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: remove "error after expression parsing" check
Denys Vlasenko [Mon, 17 Dec 2018 15:54:37 +0000 (16:54 +0100)]
bc: remove "error after expression parsing" check

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>
5 years agobc: tighten up input NUL handling
Denys Vlasenko [Mon, 17 Dec 2018 10:58:20 +0000 (11:58 +0100)]
bc: tighten up input NUL handling

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>
5 years agobc: simplify zdc_parse_string()
Denys Vlasenko [Mon, 17 Dec 2018 10:02:26 +0000 (11:02 +0100)]
bc: simplify zdc_parse_string()

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>
5 years agobc: use common strings
Denys Vlasenko [Mon, 17 Dec 2018 09:42:31 +0000 (10:42 +0100)]
bc: use common strings

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: tidy up "z-function" macro machinery
Denys Vlasenko [Mon, 17 Dec 2018 09:34:02 +0000 (10:34 +0100)]
bc: tidy up "z-function" macro machinery

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: parse file arguments piecemeal (do not read entire file)
Denys Vlasenko [Mon, 17 Dec 2018 08:51:43 +0000 (09:51 +0100)]
bc: parse file arguments piecemeal (do not read entire file)

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>
5 years agobc: move fflush to the _actual_ execution loop
Denys Vlasenko [Mon, 17 Dec 2018 00:22:53 +0000 (01:22 +0100)]
bc: move fflush to the _actual_ execution loop

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: fix typo: defone -> define
Denys Vlasenko [Sun, 16 Dec 2018 23:15:35 +0000 (00:15 +0100)]
bc: fix typo: defone -> define

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: factor out common code
Denys Vlasenko [Sun, 16 Dec 2018 23:07:48 +0000 (00:07 +0100)]
bc: factor out common code

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>
5 years agobc: remove use of "BcInstPtr ip" object from loop parsing
Denys Vlasenko [Sun, 16 Dec 2018 22:35:04 +0000 (23:35 +0100)]
bc: remove use of "BcInstPtr ip" object from loop parsing

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>
5 years agobc: store only index in p->exits, it's the only thing used there
Denys Vlasenko [Sun, 16 Dec 2018 22:24:25 +0000 (23:24 +0100)]
bc: store only index in p->exits, it's the only thing used there

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>
5 years agobc: p->exits.func is never zero, do not check for that
Denys Vlasenko [Sun, 16 Dec 2018 22:18:28 +0000 (23:18 +0100)]
bc: p->exits.func is never zero, do not check for that

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>
5 years agobc: remove redundant JUMP generation when parsing 'while'
Denys Vlasenko [Sun, 16 Dec 2018 22:02:22 +0000 (23:02 +0100)]
bc: remove redundant JUMP generation when parsing 'while'

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>
5 years agobc: simplify use of "ip" in loop parsing functions
Denys Vlasenko [Sun, 16 Dec 2018 21:44:51 +0000 (22:44 +0100)]
bc: simplify use of "ip" in loop parsing functions

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>
5 years agobc: shring bc_lib[]
Denys Vlasenko [Sun, 16 Dec 2018 20:46:11 +0000 (21:46 +0100)]
bc: shring bc_lib[]

function                                             old     new   delta
bc_lib                                              1586    1584      -2

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: shrink zbc_parse_if() a bit more
Denys Vlasenko [Sun, 16 Dec 2018 20:40:54 +0000 (21:40 +0100)]
bc: shrink zbc_parse_if() a bit more

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>
5 years agobc: stop using p->exits when parsing if()
Denys Vlasenko [Sun, 16 Dec 2018 20:29:08 +0000 (21:29 +0100)]
bc: stop using p->exits when parsing if()

function                                             old     new   delta
zbc_parse_stmt_possibly_auto                        2180    2138     -42

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: preparation to stop using p->exits when parsing if()
Denys Vlasenko [Sun, 16 Dec 2018 20:21:27 +0000 (21:21 +0100)]
bc: preparation to stop using p->exits when parsing if()

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: fix "print 1,2,3" parsing
Denys Vlasenko [Sun, 16 Dec 2018 20:08:30 +0000 (21:08 +0100)]
bc: fix "print 1,2,3" parsing

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>
5 years agobc: disallow empty statement as function body
Denys Vlasenko [Sun, 16 Dec 2018 19:46:15 +0000 (20:46 +0100)]
bc: disallow empty statement as function body

$ 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>
5 years agobc: allow only one <newline> between if() and stmt
Denys Vlasenko [Sun, 16 Dec 2018 19:41:32 +0000 (20:41 +0100)]
bc: allow only one <newline> between if() and stmt

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>
5 years agobc: simplify bc_parse_pushName(), do not free name in it - avoids one strdup
Denys Vlasenko [Sun, 16 Dec 2018 19:32:58 +0000 (20:32 +0100)]
bc: simplify bc_parse_pushName(), do not free name in it - avoids one strdup

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>
5 years agobc: simplify zbc_parse_break_or_continue(), logic is the same
Denys Vlasenko [Sun, 16 Dec 2018 18:47:40 +0000 (19:47 +0100)]
bc: simplify zbc_parse_break_or_continue(), logic is the same

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>
5 years agobc: fold zbc_parse_else() into its only caller
Denys Vlasenko [Sun, 16 Dec 2018 18:21:57 +0000 (19:21 +0100)]
bc: fold zbc_parse_else() into its only caller

While at it, allow newline between "else" and its body

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: fold bc_parse_noElse() into its only caller
Denys Vlasenko [Sun, 16 Dec 2018 18:10:38 +0000 (19:10 +0100)]
bc: fold bc_parse_noElse() into its only caller

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
5 years agobc: delete unused (write-only) BcParse::nbraces member
Denys Vlasenko [Sun, 16 Dec 2018 17:43:51 +0000 (18:43 +0100)]
bc: delete unused (write-only) BcParse::nbraces member

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>
5 years agobc: fixes for multi-line if/while/for
Denys Vlasenko [Sun, 16 Dec 2018 16:30:35 +0000 (17:30 +0100)]
bc: fixes for multi-line if/while/for

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>