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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>