Denys Vlasenko
4b72aebe80
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>
2018-12-17 17:00:29 +01:00
Denys Vlasenko
b44a7f1d66
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>
2018-12-17 11:58:20 +01:00
Denys Vlasenko
e42cc19b51
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>
2018-12-17 11:02:26 +01:00
Denys Vlasenko
59d4ce935e
bc: use common strings
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-17 10:42:31 +01:00
Denys Vlasenko
ec60318f15
bc: tidy up "z-function" macro machinery
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-17 10:34:02 +01:00
Denys Vlasenko
e4ba4c4371
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>
2018-12-17 09:51:43 +01:00
Denys Vlasenko
c5774a3458
bc: move fflush to the _actual_ execution loop
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-17 01:22:53 +01:00
Denys Vlasenko
51b22b1bce
bc: fix typo: defone -> define
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-17 00:15:35 +01:00
Denys Vlasenko
94f72a387c
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>
2018-12-17 00:07:48 +01:00
Denys Vlasenko
5ebd2a6128
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>
2018-12-16 23:35:04 +01:00
Denys Vlasenko
266aa00012
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>
2018-12-16 23:24:25 +01:00
Denys Vlasenko
8e7686e457
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>
2018-12-16 23:18:28 +01:00
Denys Vlasenko
de24e9d366
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>
2018-12-16 23:02:22 +01:00
Denys Vlasenko
06ade77002
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>
2018-12-16 22:44:51 +01:00
Denys Vlasenko
146a79d19c
bc: shring bc_lib[]
...
function old new delta
bc_lib 1586 1584 -2
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-16 21:46:11 +01:00
Denys Vlasenko
15850832be
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>
2018-12-16 21:41:17 +01:00
Denys Vlasenko
6b5b46f817
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>
2018-12-16 21:29:08 +01:00
Denys Vlasenko
7415633128
bc: preparation to stop using p->exits when parsing if()
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-16 21:21:27 +01:00
Denys Vlasenko
5d18f6be90
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>
2018-12-16 21:08:30 +01:00
Denys Vlasenko
cb18b546f7
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>
2018-12-16 20:46:15 +01:00
Denys Vlasenko
2e8be023cb
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>
2018-12-16 20:41:32 +01:00
Denys Vlasenko
e6c40c48d9
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>
2018-12-16 20:32:58 +01:00
Denys Vlasenko
563d93c9a4
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>
2018-12-16 19:47:40 +01:00
Denys Vlasenko
a50576a415
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>
2018-12-16 19:21:57 +01:00
Denys Vlasenko
6d29879c67
bc: fold bc_parse_noElse() into its only caller
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-16 19:10:38 +01:00
Denys Vlasenko
9dc5d08baa
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>
2018-12-16 18:43:51 +01:00
Denys Vlasenko
202dd1943c
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>
2018-12-16 17:30:35 +01:00
Denys Vlasenko
e9519e44a6
bc: fix handling of 'return' not in functions, and 'define f()<newline>{...}'
...
function old new delta
zbc_vm_process 561 597 +36
zbc_parse_stmt_possibly_auto 2232 2253 +21
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: 0/0 grow/shrink: 7/0 up/down: 82/0) Total: 82 bytes
text data bss dec hex filename
982138 485 7296 989919 f1adf busybox_old
982247 485 7296 990028 f1b4c busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-16 17:06:07 +01:00
Denys Vlasenko
d1d29b4245
bc: partially rewrite parser, tests pass, ^C might be broken now
...
The entire control construct (if/while/for/funcdef) or {} block is
"eaten" by the corresponding parsing function, instead of maintaining
special "block flag stack" with magic bits in it, and returning to main
input loop after every inner statement (every input line, essentially).
This required moving line input deep into lexer - now zbc_lex_next()
triggers more reading when needed.
"block flag stack" is gone.
Correctness of ^C handling wasn't checked, might need fixing now.
if/else syntax is changed to match GNU bc: "else" can not be on
the next line (the rationale is that "if (1) 2" statement in interactive
mode should execute and print 2 instead of waiting for possible
"else ..." line).
This change fixes the following examples:
if (1) if (1) 1 else 2 else 3
if (0) 1 else if (1) 2
define w() { auto z; return 1; }
function old new delta
zbc_parse_stmt_possibly_auto - 2232 +2232
zbc_vm_process 89 561 +472
zbc_lex_next 1982 2296 +314
bc_vm_init 749 757 +8
bc_parse_expr_empty_ok 2016 2021 +5
bc_num_printNewline 54 51 -3
zbc_program_read 289 280 -9
bc_parse_free 47 38 -9
bc_parse_reset 126 113 -13
bc_parse_create 108 92 -16
bc_parse_push_block_flag 47 - -47
bc_parse_noElse 48 - -48
zbc_parse_text_init 113 59 -54
zbc_parse_body 121 - -121
zbc_parse_else 125 - -125
zbc_parse_endBody 254 - -254
bc_vm_run 421 134 -287
zbc_parse_auto 290 - -290
zcommon_parse 476 - -476
zbc_parse_stmt 1682 7 -1675
------------------------------------------------------------------------------
(add/remove: 1/7 grow/shrink: 4/8 up/down: 3031/-3427) Total: -396 bytes
text data bss dec hex filename
982586 485 7296 990367 f1c9f busybox_old
982138 485 7296 989919 f1adf busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-16 16:10:38 +01:00
Denys Vlasenko
99b3762335
bc: lexer debugging, added some failing test cases
...
function old new delta
bc_parse_push_block_flag - 47 +47
zbc_parse_body 107 121 +14
zbc_num_divmod 156 150 -6
zbc_lex_number 200 192 -8
zbc_parse_endBody 264 254 -10
bc_parse_startBody 47 - -47
------------------------------------------------------------------------------
(add/remove: 1/1 grow/shrink: 1/3 up/down: 61/-71) Total: -10 bytes
text data bss dec hex filename
982596 485 7296 990377 f1ca9 busybox_old
982586 485 7296 990367 f1c9f busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-15 20:06:59 +01:00
Denys Vlasenko
fd51e0c4d2
bc: simplify BC_INST_JUMP[_ZERO] handling
...
function old new delta
zbc_program_exec 4063 4050 -13
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-15 15:07:14 +01:00
Denys Vlasenko
7db384338a
bc: rewrite "block flag stack" using simple realloc'ed byte array
...
Each access to current top flag took a function call + fetch of three data items
+ multiplication and some additions + and then following the resulting pointer.
After the change, it is: fetch pointer value + one byte access via this pointer.
function old new delta
bc_parse_startBody 45 49 +4
bc_parse_free 46 47 +1
zbc_parse_auto 188 185 -3
bc_parse_push 14 11 -3
bc_vm_run 398 394 -4
zbc_vm_process 63 58 -5
zdc_parse_expr 638 632 -6
zbc_parse_body 101 95 -6
bc_parse_addFunc 31 25 -6
bc_parse_noElse 56 48 -8
zcommon_parse 341 331 -10
zbc_parse_else 134 123 -11
bc_parse_create 124 108 -16
zbc_parse_text_init 123 104 -19
zbc_parse_endBody 292 252 -40
zbc_parse_stmt 1479 1420 -59
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/14 up/down: 5/-196) Total: -191 bytes
text data bss dec hex filename
979880 485 7296 987661 f120d busybox_old
979689 485 7296 987470 f114e busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-15 00:49:16 +01:00
Denys Vlasenko
f10f17f8d3
bc: drop zbc_parse_endBody() bool parameter, move its code to caller which uses it
...
function old new delta
zbc_parse_stmt 1456 1479 +23
zbc_parse_body 103 101 -2
zbc_parse_endBody 326 292 -34
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/2 up/down: 23/-36) Total: -13 bytes
text data bss dec hex filename
979893 485 7296 987674 f121a busybox_old
979880 485 7296 987661 f120d busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-14 23:41:33 +01:00
Denys Vlasenko
0154d78738
bc: shorten one message, make defines more readable
...
text data bss dec hex filename
979916 485 7296 987697 f1231 busybox_old
979893 485 7296 987674 f121a busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-14 23:32:51 +01:00
Denys Vlasenko
7b1df3db97
bc: pull zbc_lex_next() call out of zbc_parse_operator() into one caller that uses it
...
function old new delta
bc_parse_operator - 144 +144
bc_parse_expr_empty_ok 1788 1792 +4
zbc_parse_operator 170 - -170
------------------------------------------------------------------------------
(add/remove: 1/1 grow/shrink: 1/0 up/down: 148/-170) Total: -22 bytes
text data bss dec hex filename
979938 485 7296 987719 f1247 busybox_old
979916 485 7296 987697 f1231 busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-14 23:12:48 +01:00
Denys Vlasenko
17df882a57
bx: add more debug scaffolding
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-14 23:00:24 +01:00
Denys Vlasenko
2ea53a45b7
bc: convert macro bc_parse_push() to function, add debug infrastructure
...
function old new delta
bc_parse_push - 14 +14
zbc_parse_else 132 134 +2
bc_parse_pushName 63 61 -2
zbc_parse_operator 174 170 -4
bc_parse_number 87 83 -4
zbc_parse_string 97 89 -8
bc_parse_pushIndex 68 60 -8
zbc_parse_endBody 339 326 -13
zbc_parse_name 401 387 -14
zdc_parse_mem 107 91 -16
zdc_parse_expr 680 638 -42
zbc_parse_stmt 1502 1456 -46
bc_parse_expr_empty_ok 1838 1788 -50
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 1/11 up/down: 16/-207) Total: -191 bytes
text data bss dec hex filename
980129 485 7296 987910 f1306 busybox_old
979938 485 7296 987719 f1247 busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-14 17:51:17 +01:00
Denys Vlasenko
f86e960e7c
bc: rename zbc_parse_text() to ..._init(), reuse existing code for library parsing
...
function old new delta
zbc_parse_text_init - 123 +123
bc_vm_run 423 398 -25
zbc_parse_text 123 - -123
------------------------------------------------------------------------------
(add/remove: 1/1 grow/shrink: 0/1 up/down: 123/-148) Total: -25 bytes
text data bss dec hex filename
980154 485 7296 987935 f131f busybox_old
980129 485 7296 987910 f1306 busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-14 17:02:27 +01:00
Denys Vlasenko
0a23814e98
bc: compress two constant arguments of bc_lex_assign() to one
...
function old new delta
zbc_program_num 836 835 -1
bc_lex_assign 34 31 -3
zbc_lex_next 1930 1880 -50
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/3 up/down: 0/-54) Total: -54 bytes
text data bss dec hex filename
980208 485 7296 987989 f1355 busybox_old
980154 485 7296 987935 f131f busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-14 16:48:34 +01:00
Denys Vlasenko
8226912b2c
bc: remove stale comment, empty lines, regularize comment style
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-14 16:30:56 +01:00
Denys Vlasenko
87b49beeda
bc: tweak bc_num_parseDecimal() for readability, logic is not changed
...
function old new delta
zbc_program_num 836 835 -1
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-14 16:24:01 +01:00
Denys Vlasenko
240d7ee3fc
bc: shrink s() in library again
...
function old new delta
bc_lib 1596 1586 -10
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-10) Total: -10 bytes
text data bss dec hex filename
980152 485 7296 987933 f131d busybox_old
980142 485 7296 987923 f1313 busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-14 11:27:09 +01:00
Denys Vlasenko
fc9d26902b
bc: yet another library shrink
...
function old new delta
bc_lib 1604 1596 -8
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-8) Total: -8 bytes
text data bss dec hex filename
980160 485 7296 987941 f1325 busybox_old
980152 485 7296 987933 f131d busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-14 11:00:23 +01:00
Denys Vlasenko
c06537d9bb
bc: shrink internal library yet more
...
function old new delta
bc_lib 1609 1604 -5
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-5) Total: -5 bytes
text data bss dec hex filename
980165 485 7296 987946 f132a busybox_old
980160 485 7296 987941 f1325 busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-14 10:10:37 +01:00
Denys Vlasenko
203210e253
bc: shrink internal library more
...
function old new delta
bc_lib 1618 1609 -9
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-14 09:53:50 +01:00
Denys Vlasenko
3ac0c21a1f
bc: shrink internal library
...
function old new delta
bc_lib 1674 1618 -56
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-14 01:01:01 +01:00
Denys Vlasenko
57b6918b0a
bc: group ENABLE_BC code a bit better, no logic changes
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-14 00:12:13 +01:00
Denys Vlasenko
5f263f406c
bc: fix "dc only" bug
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-13 22:49:59 +01:00
Denys Vlasenko
e755e30402
bc: unbreak "only bc" and "only dc" configs
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-13 22:25:28 +01:00
Denys Vlasenko
89198a9e5d
bc: simplify bc_lex_whitespace()
...
function old new delta
bc_lex_whitespace 52 41 -11
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-13 21:31:29 +01:00
Denys Vlasenko
bbcecc4118
bc: G.sbgn and G.send are unused, remove them
...
function old new delta
bc_program_index 66 64 -2
bc_parse_expr_empty_ok 1840 1838 -2
dc_main 176 168 -8
bc_main 73 65 -8
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/4 up/down: 0/-20) Total: -20 bytes
text data bss dec hex filename
980327 485 7296 988108 f13cc busybox_old
980307 485 7296 988088 f13b8 busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-13 21:17:43 +01:00
Denys Vlasenko
0fe270e775
bc: simplify filename saving in zbc_vm_file()
...
function old new delta
bc_vm_run 433 423 -10
zbc_vm_file 187 174 -13
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-23) Total: -23 bytes
text data bss dec hex filename
980350 485 7296 988131 f13e3 busybox_old
980327 485 7296 988108 f13cc busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-13 19:58:58 +01:00
Denys Vlasenko
915c72b273
bc: do not append duplicate NUL, reduce indentation in bc_read_line()
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-13 19:29:02 +01:00
Denys Vlasenko
82ea67fbfa
bc: change bc_read_line() and zbc_vm_stdin() to avoid double buffers
...
function old new delta
bc_read_line 129 124 -5
bc_vm_run 523 433 -90
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-95) Total: -95 bytes
text data bss dec hex filename
980445 485 7296 988226 f1442 busybox_old
980350 485 7296 988131 f13e3 busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-13 19:24:42 +01:00
Denys Vlasenko
b7e61e3e4a
bc: further simplification in zbc_vm_stdin()
...
function old new delta
bc_vm_run 500 523 +23
bc_vec_concat 66 - -66
------------------------------------------------------------------------------
(add/remove: 0/1 grow/shrink: 1/0 up/down: 23/-66) Total: -43 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-13 18:16:39 +01:00
Denys Vlasenko
818b602c88
bc: fix another thinko
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-13 17:56:35 +01:00
Denys Vlasenko
335b4efd2f
bc: fix a thinko: dc uses [] string delimiters, bot bc!
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-13 17:46:26 +01:00
Denys Vlasenko
766f67250f
bc: fix comment handling
...
function old new delta
bc_vm_run 514 513 -1
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-13 17:43:23 +01:00
Denys Vlasenko
7dc0a51286
bc: further zbc_vm_stdin() optimizations
...
function old new delta
bc_vm_run 534 514 -20
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-13 17:36:41 +01:00
Denys Vlasenko
40534bb6e2
bc: shrink zbc_vm_stdin()
...
function old new delta
bc_vm_run 592 534 -58
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-13 17:27:00 +01:00
Denys Vlasenko
89e785af98
bc: trim config help text, add a few comments, no code changes
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-13 16:35:52 +01:00
Denys Vlasenko
9811ad02bd
bc: unbreak CONFIG_FEATURE_BC_SIGNALS=y config
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-12 23:25:13 +01:00
Denys Vlasenko
c2265f526e
bc: remove lexer function pointer
...
function old new delta
zbc_lex_next 81 1930 +1849
bc_parse_create 131 124 -7
common_parse_init 31 - -31
zdc_lex_token 672 - -672
zbc_lex_token 1193 - -1193
------------------------------------------------------------------------------
(add/remove: 0/3 grow/shrink: 1/1 up/down: 1849/-1903) Total: -54 bytes
text data bss dec hex filename
980634 485 7296 988415 f14ff busybox_old
980580 485 7296 988361 f14c9 busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-12 23:14:44 +01:00
Denys Vlasenko
c0ef23ca40
bc: remove parse function pointer
...
function old new delta
zbc_program_asciify - 372 +372
zcommon_parse - 341 +341
zbc_program_printStream - 141 +141
zbc_program_pushArray - 111 +111
zbc_program_nquit - 92 +92
zbc_vm_process 61 63 +2
zbc_parse_text 122 123 +1
bc_vm_run 591 592 +1
zdc_parse_mem 108 107 -1
zbc_parse_operator 175 174 -1
zbc_parse_else 133 132 -1
zbc_parse_body 104 103 -1
zbc_program_read 261 259 -2
zdc_parse_register 40 37 -3
zbc_parse_string 100 97 -3
zbc_parse_endBody 343 339 -4
zdc_parse_expr 688 680 -8
zbc_parse_auto 198 188 -10
zbc_parse_name 414 401 -13
common_parse_init 45 31 -14
zdc_parse_parse 23 - -23
bc_parse_create 158 131 -27
zbc_parse_stmt 1540 1502 -38
bc_parse_expr_empty_ok 1882 1840 -42
zbc_program_exec 3963 3837 -126
zbc_parse_parse 311 - -311
zbc_program_modexp 556 - -556
------------------------------------------------------------------------------
(add/remove: 5/3 grow/shrink: 3/16 up/down: 1061/-1184) Total: -123 bytes
text data bss dec hex filename
980757 485 7296 988538 f157a busybox_old
980634 485 7296 988415 f14ff busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-12 23:03:10 +01:00
Denys Vlasenko
19f110751d
bc: convert two more functions to "z" logic
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-12 22:48:19 +01:00
Denys Vlasenko
8a89247e0a
bc: remove BC_STATUS_EOF (again), the condition is detectable as len==0
...
function old new delta
bc_read_line 147 129 -18
bc_vm_run 618 591 -27
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-45) Total: -45 bytes
text data bss dec hex filename
980802 485 7296 988583 f15a7 busybox_old
980757 485 7296 988538 f157a busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-12 22:43:58 +01:00
Denys Vlasenko
d8078a79be
dc: fix EOF handling in case of last line being incomplete
...
This wasn't working correctly:
$ echo -ne '10 20+p' | dc
30
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-12 21:56:06 +01:00
Denys Vlasenko
d6ad3666dc
bc: further conversions to "z" logic
...
function old new delta
bc_program_exec 3876 - -3876
zbc_program_exec - 3963 +3963
bc_program_execStr 429 - -429
zbc_program_execStr - 427 +427
bc_vm_file 197 - -197
zbc_vm_file - 187 +187
bc_vm_process 74 - -74
zbc_vm_process - 61 +61
bc_parse_pushIndex 66 68 +2
bc_vm_run 624 618 -6
dc_main 187 176 -11
bc_program_reset 64 - -64
zbc_program_pushArray 111 - -111
------------------------------------------------------------------------------
(add/remove: 4/6 grow/shrink: 1/2 up/down: 4640/-4768) Total: -128 bytes
text data bss dec hex filename
980922 485 7296 988703 f161f busybox_old
980794 485 7296 988575 f159f busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-12 21:39:10 +01:00
Denys Vlasenko
c2da68e896
bc: optimize bc_parse_pushIndex()
...
function old new delta
bc_parse_pushIndex 80 68 -12
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-12 16:44:34 +01:00
Denys Vlasenko
26819db9a3
bc: convert even more of lexer functions to "z" convention
...
function old new delta
bc_parse_name 416 - -416
zbc_parse_name - 414 +414
bc_parse_parse 305 - -305
zbc_parse_parse - 311 +311
bc_program_read 271 - -271
zbc_program_read - 261 +261
bc_parse_text 129 - -129
zbc_parse_text - 122 +122
dc_parse_parse 26 - -26
zdc_parse_parse - 23 +23
bc_program_index 66 64 -2
bc_vm_process 92 74 -18
bc_program_execStr 460 429 -31
bc_parse_expr_empty_ok 1939 1882 -57
------------------------------------------------------------------------------
(add/remove: 5/5 grow/shrink: 0/4 up/down: 1131/-1255) Total: -124 bytes
text data bss dec hex filename
981058 485 7296 988839 f16a7 busybox_old
980934 485 7296 988715 f162b busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-12 16:09:47 +01:00
Denys Vlasenko
ae0faf91d0
bc: convert even more of lexer functions to "z" convention
...
function old new delta
bc_parse_stmt 1594 - -1594
zbc_parse_stmt - 1540 +1540
common_parse_expr 43 - -43
zcommon_parse_expr - 40 +40
bc_parse_expr 24 - -24
zbc_parse_expr - 24 +24
zbc_parse_body 108 104 -4
bc_program_read 277 271 -6
bc_program_execStr 468 460 -8
bc_parse_expr_empty_ok 1955 1939 -16
bc_parse_name 451 416 -35
bc_parse_parse 476 305 -171
------------------------------------------------------------------------------
(add/remove: 3/3 grow/shrink: 0/6 up/down: 1604/-1901) Total: -297 bytes
text data bss dec hex filename
981355 485 7296 989136 f17d0 busybox_old
981058 485 7296 988839 f16a7 busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-12 15:19:54 +01:00
Denys Vlasenko
8cd468f604
bc: convert more of lexer functions to "z" convention
...
function old new delta
dc_parse_expr 748 - -748
zdc_parse_expr - 688 +688
bc_parse_endBody 338 - -338
zbc_parse_endBody - 343 +343
bc_parse_auto 201 - -201
zbc_parse_auto - 198 +198
dc_parse_mem 115 - -115
zdc_parse_mem - 108 +108
bc_parse_body 116 - -116
zbc_parse_body - 108 +108
bc_parse_string 102 - -102
zbc_parse_string - 100 +100
dc_parse_register 43 - -43
zdc_parse_register - 40 +40
common_parse_expr 40 43 +3
bc_parse_parse 321 476 +155
bc_parse_stmt 1598 1594 -4
dc_parse_parse 44 26 -18
bc_parse_reset 153 - -153
------------------------------------------------------------------------------
(add/remove: 7/8 grow/shrink: 2/2 up/down: 1743/-1838) Total: -95 bytes
text data bss dec hex filename
981450 485 7296 989231 f182f busybox_old
981355 485 7296 989136 f17d0 busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-12 14:57:15 +01:00
Denys Vlasenko
9a34e89289
bc: partially convert lexer functions to "z" convention
...
function old new delta
bc_lex_token 1228 - -1228
zbc_lex_token - 1193 +1193
dc_lex_token 674 - -674
zdc_lex_token - 672 +672
bc_parse_operator 177 - -177
zbc_parse_operator - 175 +175
bc_parse_else 133 - -133
zbc_parse_else - 133 +133
bc_lex_next 91 - -91
zbc_lex_next - 81 +81
dc_parse_expr 744 748 +4
bc_parse_string 100 102 +2
bc_parse_body 114 116 +2
dc_parse_mem 116 115 -1
bc_parse_text 130 129 -1
dc_parse_register 51 43 -8
bc_parse_endBody 358 338 -20
bc_parse_name 513 451 -62
bc_parse_auto 265 201 -64
bc_parse_expr_empty_ok 2032 1955 -77
bc_parse_parse 417 321 -96
bc_parse_stmt 1753 1598 -155
------------------------------------------------------------------------------
(add/remove: 5/5 grow/shrink: 3/9 up/down: 2262/-2787) Total: -525 bytes
text data bss dec hex filename
981975 485 7296 989756 f1a3c busybox_old
981450 485 7296 989231 f182f busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-12 13:58:55 +01:00
Denys Vlasenko
251fbb57be
bc: code shrink in bc_num_cmp()
...
function old new delta
bc_num_cmp 275 231 -44
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-12 11:51:32 +01:00
Denys Vlasenko
16494f557f
bc: simplify zbc_program_logical()
...
function old new delta
bc_program_exec 3918 3876 -42
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-42) Total: -42 bytes
text data bss dec hex filename
982061 485 7296 989842 f1a92 busybox_old
982019 485 7296 989800 f1a68 busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-12 00:51:53 +01:00
Denys Vlasenko
69171dc466
bc: simplify nested read() check
...
function old new delta
bc_vm_run 622 624 +2
dc_main 186 187 +1
bc_main 72 73 +1
bc_program_read 312 277 -35
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 3/1 up/down: 4/-35) Total: -31 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-12 00:29:24 +01:00
Denys Vlasenko
12b9eaf787
bc: in non-interactive config, POSIX error functions never return nonzero
...
function old new delta
bc_parse_expr_empty_ok 2036 2032 -4
bc_parse_stmt 1767 1753 -14
bc_lex_token 1259 1228 -31
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/3 up/down: 0/-49) Total: -49 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-11 23:50:14 +01:00
Denys Vlasenko
f0f069b08f
bc: use common_parse_init() in bc_vm_init()
...
function old new delta
common_parse_init 26 45 +19
dc_parse_init 17 - -17
bc_parse_init 17 - -17
bc_vm_init 744 725 -19
------------------------------------------------------------------------------
(add/remove: 0/2 grow/shrink: 1/1 up/down: 19/-53) Total: -34 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-11 23:22:52 +01:00
Denys Vlasenko
4dd3652c2f
bc: fix EOF handling in bc_program_read()
...
$ bc -q
read()
2^D^D2
^ prints the result of read()'ed expression
function old new delta
zbc_program_print 629 642 +13
bc_program_read 322 312 -10
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/1 up/down: 13/-10) Total: 3 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-11 22:45:15 +01:00
Denys Vlasenko
2c6f563216
bc: tweak comment
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-11 21:21:14 +01:00
Denys Vlasenko
c008a73762
bc: convert bc_program_asciify to "z" function
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-11 20:57:53 +01:00
Denys Vlasenko
9f657e0f7d
bc: shrink bc_program_printString
...
function old new delta
zbc_program_print 665 642 -23
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-11 19:52:25 +01:00
Denys Vlasenko
259137d0f0
bc: convert zbc_program_op to "z" function, fix a thinko in prev commits
...
function old new delta
zbc_program_assign 448 447 -1
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-11 19:44:14 +01:00
Denys Vlasenko
728e7c9ecb
bc: convert bc_program_logical to "z" function
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-11 19:37:00 +01:00
Denys Vlasenko
09d8df84ee
bc: do not use "(cond ? f1 : f2)(params)" idiom, it messes up static function optimizations
...
With direct calls, GCC no longer thinks that we take addresses of the functions,
and can use "more optimal" internal ABI for _all_ calls to these functions,
not only at this callsite. On i486, regparm is used, and:
function old new delta
zbc_num_inv 56 57 +1
zbc_num_k 852 851 -1
zbc_program_modexp 558 556 -2
zbc_num_d 541 539 -2
bc_num_ulong2num 59 57 -2
zbc_program_num 840 836 -4
bc_num_zero 11 7 -4
bc_num_one 28 24 -4
bc_program_exec 3928 3918 -10
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/8 up/down: 1/-29) Total: -28 bytes
text data bss dec hex filename
982237 485 7296 990018 f1b42 busybox_old
982209 485 7296 989990 f1b26 busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-11 19:33:09 +01:00
Denys Vlasenko
7f4daa4f58
bc: convert arithmetic calc functions to "z" logic
...
In order for magic macros to work, a bit of reordering was necessary.
function old new delta
zbc_program_modexp - 558 +558
zbc_program_assign - 448 +448
zbc_program_pushArray - 111 +111
zbc_num_s 239 237 -2
zbc_num_d 543 541 -2
zbc_num_binary 145 143 -2
zbc_num_a 443 441 -2
zbc_num_rem 95 91 -4
zbc_num_divmod 150 146 -4
zbc_num_m 269 257 -12
zbc_num_r 230 208 -22
zbc_num_printNum 447 417 -30
bc_program_exec 3960 3928 -32
zbc_num_p 434 399 -35
zbc_program_num 880 840 -40
zbc_num_k 913 852 -61
zbc_program_printStream 141 - -141
bc_program_assign 455 - -455
bc_program_modexp 668 - -668
------------------------------------------------------------------------------
(add/remove: 3/3 grow/shrink: 0/13 up/down: 1117/-1512) Total: -395 bytes
text data bss dec hex filename
982632 485 7296 990413 f1ccd busybox_old
982237 485 7296 990018 f1b42 busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-11 19:22:04 +01:00
Denys Vlasenko
1aeacefbb3
bc: rename arithmetic calc functions to "z" functions, no code changes
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-11 19:12:13 +01:00
Denys Vlasenko
c2d15dff42
bc: move declarations around, no code changes
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-11 17:56:09 +01:00
Denys Vlasenko
c355c4a7d6
bc: code shrink in zbc_lex_number()
...
function old new delta
zbc_lex_number 279 190 -89
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-11 17:36:21 +01:00
Denys Vlasenko
b402ff844c
bc: make bc_program_pushVar "z-function"
...
function old new delta
bc_program_pushVar 200 198 -2
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-11 15:45:15 +01:00
Denys Vlasenko
2930123279
bc: improve "noninteractive" macro machinery so that even "return zero" code is not generated
...
Most affected functions shrink by 2 bytes on x86.
function old new delta
zbc_program_num - 880 +880
zbc_program_print - 665 +665
zbc_num_printNum - 447 +447
zbc_program_call - 323 +323
zbc_program_copyToVar - 287 +287
zbc_lex_number - 279 +279
zbc_program_binOpPrep - 269 +269
zbc_program_assignStr - 142 +142
zbc_program_printStream - 141 +141
zbc_func_insert - 93 +93
zbc_num_ulong - 88 +88
zbc_program_prep - 79 +79
zbc_num_shift - 53 +53
bc_num_shift 54 - -54
bc_program_prep 81 - -81
bc_num_ulong 90 - -90
bc_func_insert 95 - -95
bc_program_printStream 143 - -143
bc_program_assignStr 144 - -144
bc_program_binOpPrep 271 - -271
bc_lex_number 281 - -281
bc_program_copyToVar 289 - -289
bc_program_call 325 - -325
bc_num_printNum 471 - -471
bc_program_print 667 - -667
bc_program_num 880 - -880
------------------------------------------------------------------------------
(add/remove: 13/13 grow/shrink: 0/0 up/down: 3746/-3791) Total: -45 bytes
text data bss dec hex filename
982779 485 7296 990560 f1d60 busybox_old
982734 485 7296 990515 f1d33 busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-11 15:29:32 +01:00
Denys Vlasenko
91cde95916
bc: it's not clear bc_vm_file() always exits on errors, remove ERRORS_ARE_FATAL
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-10 20:56:44 +01:00
Denys Vlasenko
628bf1bc63
bc: more ERRORS_ARE_FATAL annotations
...
function old new delta
bc_program_exec 3920 3969 +49
bc_program_call 329 325 -4
bc_vm_run 622 616 -6
bc_program_modexp 677 668 -9
bc_program_assign 471 455 -16
bc_program_pushArray 113 - -113
------------------------------------------------------------------------------
(add/remove: 0/1 grow/shrink: 1/4 up/down: 49/-148) Total: -99 bytes
text data bss dec hex filename
982872 485 7296 990653 f1dbd busybox_old
982773 485 7296 990554 f1d5a busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-10 20:41:05 +01:00
Denys Vlasenko
88cfea6a81
bc: stop checking for name length in bc_lex_name()
...
Gigabyte-long names are not a practical concern.
function old new delta
bc_lex_name 73 69 -4
bc_lex_token 1266 1259 -7
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-11) Total: -11 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-10 20:26:04 +01:00
Denys Vlasenko
fa35e598ab
bc: optimize non-interactive config: we know that many functions always succeed
...
function old new delta
bc_program_assign 475 471 -4
bc_program_prep 87 81 -6
bc_parse_parse 423 417 -6
bc_num_p 440 434 -6
bc_program_printStream 153 143 -10
bc_program_execStr 478 468 -10
bc_parse_auto 275 265 -10
bc_num_k 925 913 -12
bc_program_copyToVar 307 289 -18
bc_program_binOpPrep 289 271 -18
bc_num_printNum 489 471 -18
bc_num_m 287 269 -18
bc_program_pushArray 139 113 -26
bc_program_modexp 707 677 -30
bc_program_print 704 667 -37
bc_program_exec 4010 3920 -90
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/16 up/down: 0/-319) Total: -319 bytes
text data bss dec hex filename
983202 485 7296 990983 f1f07 busybox_old
982883 485 7296 990664 f1dc8 busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-10 20:17:24 +01:00
Denys Vlasenko
86e63cdeca
bc: in non-interactive config, let compiler know that error funcs do not return
...
function old new delta
bc_num_s 235 239 +4
bc_lex_next 92 91 -1
dc_parse_register 53 51 -2
dc_parse_parse 46 44 -2
bc_vm_run 624 622 -2
bc_program_assignStr 146 144 -2
bc_parse_else 135 133 -2
bc_parse_body 116 114 -2
bc_num_a 445 443 -2
bc_func_insert 97 95 -2
bc_program_pushVar 203 200 -3
bc_parse_text 133 130 -3
bc_error_bad_character 17 14 -3
bc_error 14 11 -3
bc_program_printStream 157 153 -4
bc_program_prep 91 87 -4
bc_program_copyToVar 311 307 -4
bc_num_ulong 95 90 -5
bc_num_p 445 440 -5
bc_program_print 711 704 -7
bc_parse_endBody 365 358 -7
bc_num_r 237 230 -7
bc_num_d 550 543 -7
dc_lex_token 682 674 -8
bc_program_pushArray 147 139 -8
bc_program_assign 485 475 -10
bc_program_read 333 322 -11
bc_lex_token 1278 1266 -12
bc_parse_stmt 1780 1767 -13
bc_program_modexp 723 707 -16
dc_parse_expr 762 744 -18
bc_program_execStr 496 478 -18
bc_program_call 347 329 -18
bc_vm_file 219 197 -22
bc_program_binOpPrep 311 289 -22
bc_parse_name 539 513 -26
bc_parse_parse 451 423 -28
bc_program_num 912 880 -32
bc_read_line 172 139 -33
bc_program_exec 4048 4010 -38
bc_parse_auto 313 275 -38
bc_parse_expr_empty_ok 2095 2036 -59
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/41 up/down: 4/-509) Total: -505 bytes
text data bss dec hex filename
983707 485 7296 991488 f2100 busybox_old
983202 485 7296 990983 f1f07 busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-10 19:46:53 +01:00
Denys Vlasenko
dafbc2cdb8
bc: simplify bc_num_parseDecimal() further
...
function old new delta
bc_program_num 925 912 -13
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-10 15:38:52 +01:00
Denys Vlasenko
5ba55f1f35
bc: make all function pointers FAST_FUNC, on i486 this saves ~400 bytes
...
function old new delta
bc_num_rem 91 95 +4
bc_num_inv 53 56 +3
bc_num_d 569 572 +3
bc_num_printDigits 136 137 +1
bc_program_assign 486 485 -1
dc_lex_token 684 682 -2
bc_vec_pop 27 25 -2
bc_vec_npop 55 53 -2
bc_program_read 335 333 -2
bc_program_print 713 711 -2
bc_parse_parse 462 460 -2
bc_lex_token 1280 1278 -2
bc_num_printChar 27 24 -3
bc_num_binary 150 147 -3
dc_parse_parse 59 55 -4
bc_vm_run 630 626 -4
bc_num_printHex 71 67 -4
bc_num_divmod 155 150 -5
bc_vec_free 24 18 -6
bc_string_free 15 9 -6
bc_num_free 15 9 -6
bc_id_free 15 9 -6
bc_parse_free 53 46 -7
bc_program_scale 8 - -8
bc_num_r 245 237 -8
bc_func_free 35 27 -8
bc_result_free 57 46 -11
bc_num_a 454 443 -11
bc_num_sub 77 65 -12
bc_num_add 77 65 -12
bc_program_modexp 736 723 -13
bc_num_s 252 239 -13
bc_num_mul 62 49 -13
bc_num_mod 62 49 -13
bc_num_div 62 49 -13
bc_num_pow 47 31 -16
bc_program_exec 4081 4059 -22
bc_num_printNum 514 489 -25
bc_num_p 478 445 -33
bc_program_len 34 - -34
bc_program_num 963 925 -38
bc_num_k 988 944 -44
------------------------------------------------------------------------------
(add/remove: 0/2 grow/shrink: 4/36 up/down: 11/-416) Total: -405 bytes
text data bss dec hex filename
984536 485 7296 992317 f243d busybox_old
984131 485 7296 991912 f22a8 busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-10 15:37:14 +01:00
Denys Vlasenko
c665c183f1
bc: 0xffffffffffffffff may be larger than unsigned long
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-10 15:15:42 +01:00
Denys Vlasenko
8b4cf0dbb0
bc: optimize bc_vec_concat()
...
function old new delta
bc_vec_concat 71 66 -5
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-10 15:12:58 +01:00
Denys Vlasenko
a7f1a36540
bc: simplify bc_program_len()
...
function old new delta
bc_program_len 42 34 -8
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-10 12:57:01 +01:00
Denys Vlasenko
44d79d866d
bc: simplify bc_program_print()
...
function old new delta
bc_program_print 730 713 -17
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-10 12:33:40 +01:00
Denys Vlasenko
b696d9ec20
bc: simplify bc_num_ulong2num()
...
function old new delta
bc_num_ulong2num 64 59 -5
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-10 12:22:15 +01:00
Denys Vlasenko
9311e01803
bc: move str-to-num conversion functions to their only caller, bc_num_parse()
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-10 11:54:59 +01:00
Denys Vlasenko
218ed1cf54
bc: further simplify string-to-number conversion code
...
function old new delta
bc_program_index 66 64 -2
bc_program_num 983 963 -20
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-22) Total: -22 bytes
text data bss dec hex filename
985706 477 7296 993479 f28c7 busybox_old
985684 477 7296 993457 f28b1 busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-09 13:33:52 +01:00
Denys Vlasenko
4a024c7719
bc: simplify string-tonumber conversion code
...
function old new delta
bc_program_num 1108 983 -125
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-125) Total: -125 bytes
text data bss dec hex filename
985831 477 7296 993604 f2944 busybox_old
985706 477 7296 993479 f28c7 busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-09 13:21:54 +01:00
Denys Vlasenko
3129f705fc
bc: no need to "set to zero" BcNum after bc_num_init(), it already is
...
function old new delta
bc_num_init 48 49 +1
bc_program_num 1115 1108 -7
bc_program_exec 4098 4081 -17
bc_vm_init 786 768 -18
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/3 up/down: 1/-42) Total: -41 bytes
text data bss dec hex filename
985872 477 7296 993645 f296d busybox_old
985831 477 7296 993604 f2944 busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-09 12:04:44 +01:00
Denys Vlasenko
e20e00de34
bc: add and use bc_num_init_DEF_SIZE()
...
function old new delta
bc_num_init_DEF_SIZE - 10 +10
bc_num_binary 150 148 -2
bc_program_pushVar 208 203 -5
bc_program_modexp 741 736 -5
bc_program_copyToVar 316 311 -5
bc_program_call 352 347 -5
bc_array_expand 88 83 -5
bc_program_num 1125 1115 -10
bc_vm_init 821 786 -35
bc_program_exec 4152 4098 -54
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 0/9 up/down: 10/-126) Total: -116 bytes
text data bss dec hex filename
985988 477 7296 993761 f29e1 busybox_old
985872 477 7296 993645 f296d busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-09 11:44:20 +01:00
Denys Vlasenko
5ec4b49125
bc: in bc_program_execStr(), push two variables into inner scope
...
function old new delta
bc_program_execStr 502 496 -6
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-09 02:54:06 +01:00
Denys Vlasenko
927a7d6853
bc: in bc_program_exec(), push two variables into inner scope
...
While at it, delete empty lines.
function old new delta
bc_program_exec 4179 4152 -27
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-09 02:24:14 +01:00
Denys Vlasenko
8fa1e8e6e7
bc: add accessors for G.prog.strs[idx], G.prog.fns[idx]
...
function old new delta
bc_program_str - 17 +17
bc_program_func - 17 +17
bc_program_addFunc 209 204 -5
bc_program_reset 70 64 -6
bc_program_printStream 163 157 -6
bc_program_print 736 730 -6
bc_vm_file 226 219 -7
bc_parse_text 143 133 -10
bc_parse_reset 163 153 -10
bc_parse_endBody 375 365 -10
bc_parse_create 168 158 -10
bc_parse_addFunc 41 31 -10
bc_program_call 364 352 -12
bc_program_read 350 335 -15
bc_program_execStr 528 502 -26
bc_program_exec 4219 4179 -40
------------------------------------------------------------------------------
(add/remove: 2/0 grow/shrink: 0/14 up/down: 34/-173) Total: -139 bytes
text data bss dec hex filename
985043 485 7296 992824 f2638 busybox_old
984904 485 7296 992685 f25ad busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-09 00:03:57 +01:00
Denys Vlasenko
0f37b3286a
bc: eliminate always the same params to bc_num_printBase()
...
function old new delta
bc_program_print 739 736 -3
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-08 23:48:53 +01:00
Denys Vlasenko
ebc41c9d94
bc: remove redundant error checks in bc_parse_print()
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-08 23:36:28 +01:00
Denys Vlasenko
5f1b90b91a
bc: stop propagating pointer to G.prog.nchars deep into printing functions
...
function old new delta
bc_num_printHex 62 71 +9
bc_num_printNewline 47 54 +7
bc_num_printDigits 132 136 +4
bc_num_printChar 23 27 +4
bc_program_printStream 173 163 -10
bc_program_print 754 739 -15
bc_num_printNum 538 514 -24
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 4/3 up/down: 24/-49) Total: -25 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-08 23:18:06 +01:00
Denys Vlasenko
2a8ad48734
bc: do not pass line width in parameters, it's in globals
...
function old new delta
bc_num_printNewline 36 47 +11
bc_num_printHex 70 62 -8
bc_num_printDigits 142 132 -10
bc_program_printStream 185 173 -12
bc_program_print 773 754 -19
bc_num_printNum 563 538 -25
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/5 up/down: 11/-74) Total: -63 bytes
text data bss dec hex filename
985122 485 7296 992903 f2687 busybox_old
985059 485 7296 992840 f2648 busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-08 21:56:37 +01:00
Denys Vlasenko
ac6ed11f8d
bc: remove "ready for more input" message, GNU bc does not print that
...
function old new delta
bc_read_line 285 268 -17
bc_vm_run 684 630 -54
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-71) Total: -71 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-08 21:39:10 +01:00
Denys Vlasenko
6e7c65fca0
bc: trim banner, use empty interactive prompts (GNU bc compat)
...
function old new delta
bc_vm_run 689 684 -5
bc_program_read 355 350 -5
bc_read_line 307 285 -22
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/3 up/down: 0/-32) Total: -32 bytes
text data bss dec hex filename
985409 485 7296 993190 f27a6 busybox_old
985265 485 7296 993046 f2716 busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-08 19:34:35 +01:00
Denys Vlasenko
d0bc5fdfea
dc: fix "small dc" to have standard command line API
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-08 18:59:07 +01:00
Denys Vlasenko
f522dd9420
bc: replace G.eof with a special exit code of bc_vm_stdin()
...
function old new delta
bc_read_line 305 307 +2
bc_vm_run 701 689 -12
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/1 up/down: 2/-12) Total: -10 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-07 16:35:43 +01:00
Denys Vlasenko
2d615fee38
bc: convert two macros to functions, unwing one complex max(a,min(b,c))
...
function old new delta
BC_NUM_AREQ - 45 +45
BC_NUM_MREQ - 33 +33
bc_num_rem 104 91 -13
bc_num_divmod 168 155 -13
bc_num_d 584 569 -15
bc_num_mul 80 62 -18
bc_num_mod 80 62 -18
bc_num_div 80 62 -18
bc_num_sub 112 77 -35
bc_num_add 112 77 -35
------------------------------------------------------------------------------
(add/remove: 2/0 grow/shrink: 0/8 up/down: 78/-165) Total: -87 bytes
text data bss dec hex filename
985526 485 7296 993307 f281b busybox_old
985439 485 7296 993220 f27c4 busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-07 16:22:45 +01:00
Denys Vlasenko
64074a1767
bc: do not perform domr limit checks when they can't work (e.g. on 32-bit arches)
...
Also, optimize printing of messages with fixed limit strings
by including limits as strings.
function old new delta
bc_num_ulong 103 95 -8
bc_lex_number 296 281 -15
dc_lex_token 701 684 -17
bc_lex_name 90 73 -17
bc_num_shift 72 54 -18
bc_lex_token 1299 1280 -19
bc_parse_stmt 1868 1768 -100
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/7 up/down: 0/-194) Total: -194 bytes
text data bss dec hex filename
985814 485 7296 993595 f293b busybox_old
985526 485 7296 993307 f281b busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-07 15:50:14 +01:00
Denys Vlasenko
ffdcebdffe
bc: pull temporary into a register
...
function old new delta
bc_num_ulong 103 95 -8
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-07 15:10:05 +01:00
Denys Vlasenko
18c6b54f82
bc: use more compact parsing data structures
...
function old new delta
dc_lex_token 697 701 +4
bc_parse_next_rel 20 - -20
bc_parse_next_read 20 - -20
bc_parse_next_print 20 - -20
bc_parse_next_param 20 - -20
bc_parse_next_for 20 - -20
bc_parse_next_expr 20 - -20
bc_parse_next_elem 20 - -20
common_parse_expr 62 40 -22
bc_parse_expr 49 24 -25
dc_lex_regs 52 13 -39
bc_parse_name 581 539 -42
bc_parse_expr_empty_ok 2157 2108 -49
dc_parse_insts 332 83 -249
dc_lex_tokens 364 91 -273
bc_parse_stmt 2261 1868 -393
------------------------------------------------------------------------------
(add/remove: 0/7 grow/shrink: 1/8 up/down: 4/-1232) Total: -1228 bytes
text data bss dec hex filename
987037 485 7296 994818 f2e02 busybox_old
985814 485 7296 993595 f293b busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-07 12:57:32 +01:00
Denys Vlasenko
b9c321d6d9
bc: use only G_interrupt as interrupt flag
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-07 12:41:42 +01:00
Denys Vlasenko
c7a7ce06b8
bc: fix exit codes for FEATURE_CLEAN_UP=y
...
$ echo 0/0 | ./busybox bc; echo $?
bc: divide by zero
1
$ echo halt | ./busybox bc; echo $?
0 <------- was 1
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-06 23:06:57 +01:00
Denys Vlasenko
6d0be10aae
bc: correctly parse dc options
...
function old new delta
bc_vm_init - 821 +821
bc_vm_file - 226 +226
dc_main 41 187 +146
bc_main 41 73 +32
packed_usage 33076 33059 -17
bc_vm_run 1903 701 -1202
------------------------------------------------------------------------------
(add/remove: 2/0 grow/shrink: 2/2 up/down: 1225/-1219) Total: 6 bytes
text data bss dec hex filename
987046 485 7296 994827 f2e0b busybox_old
987037 485 7296 994818 f2e02 busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-06 18:41:59 +01:00
Denys Vlasenko
4c9455f967
dc: fix "dc does_not_exist" SEGVing
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-06 15:21:39 +01:00
Denys Vlasenko
b23ac51d0c
bc: code shrink - convert two macros to functions
...
function old new delta
bc_program_printStream - 185 +185
bc_program_pushArray - 147 +147
bc_program_exec 4132 4219 +87
bc_vec_pop - 27 +27
bc_vec_top - 13 +13
bc_num_ulong 92 103 +11
bc_vm_run 1905 1903 -2
bc_vm_process 94 92 -2
bc_program_reset 72 70 -2
bc_program_prep 93 91 -2
bc_program_call 366 364 -2
bc_parse_startBody 47 45 -2
bc_parse_parse 464 462 -2
bc_parse_else 137 135 -2
bc_parse_body 118 116 -2
bc_program_num 1129 1125 -4
bc_parse_text 147 143 -4
bc_program_retire 40 35 -5
bc_program_print 778 773 -5
bc_program_modexp 746 741 -5
bc_program_pushVar 215 208 -7
bc_program_copyToVar 323 316 -7
bc_parse_operator 184 177 -7
bc_parse_noElse 65 56 -9
bc_program_binOpRetire 56 46 -10
bc_parse_stmt 2271 2261 -10
bc_program_execStr 543 528 -15
bc_program_assignStr 161 146 -15
bc_parse_expr_empty_ok 2178 2157 -21
bc_parse_endBody 420 375 -45
bc_program_asciify 464 - -464
------------------------------------------------------------------------------
(add/remove: 4/1 grow/shrink: 2/24 up/down: 470/-651) Total: -181 bytes
text data bss dec hex filename
987227 485 7296 995008 f2ec0 busybox_old
987046 485 7296 994827 f2e0b busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-06 13:10:56 +01:00
Denys Vlasenko
d00d2f9603
bc: make keyword POSIXness check more readable
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-06 12:59:40 +01:00
Denys Vlasenko
b6f60863cb
bc: move a function to reduce forward declarations
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-06 12:54:26 +01:00
Denys Vlasenko
e55a572600
bc: small simplification in dc_lex_token()
...
Pulling array element into a temporary, taking address of this temporary
and copying it? That's much unnecessary work.
function old new delta
dc_lex_token 701 697 -4
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-06 12:47:17 +01:00
Denys Vlasenko
2fa11b6d35
bc: add comment about BC_NUM_DEF_SIZE
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-06 12:34:39 +01:00
Denys Vlasenko
1ff8862149
bc: fix for prev commit
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-06 12:06:16 +01:00
Denys Vlasenko
4c30406df6
bc: do not needlessly use strcat
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-06 12:01:17 +01:00
Denys Vlasenko
23c2e9fcf9
bc: unbreak "BC only" and "DC only" configs
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-06 11:43:17 +01:00
Denys Vlasenko
9ca9ef2d5b
dc: re-enable "tiny dc" implementation
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-06 11:31:14 +01:00
Denys Vlasenko
a6f84e1a35
bc: reuse common string
...
text data bss dec hex filename
987232 485 7296 995013 f2ec5 busybox_old
987205 485 7296 994986 f2eaa busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-06 11:10:11 +01:00
Denys Vlasenko
95f93bdc28
bc: hook up line editing with history buffer
...
function old new delta
push_input_byte - 65 +65
bc_vm_run 1875 1905 +30
bc_read_line 303 305 +2
bc_num_binary 148 150 +2
bc_num_ulong 103 92 -11
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 3/1 up/down: 99/-11) Total: 88 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-06 10:29:12 +01:00
Denys Vlasenko
ed849351d1
bc: add preparatory indent block, no code changes
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-06 10:26:13 +01:00
Denys Vlasenko
1a6a482d19
bc: if ^C handling is not selected, there is no interactive mode
...
function old new delta
packed_usage 33023 33076 +53
bc_num_s 252 246 -6
bc_vm_run 1859 1850 -9
bc_error_fmt 36 20 -16
bc_posix_error_fmt 58 41 -17
bc_read_line 202 168 -34
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/5 up/down: 53/-82) Total: -29 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-06 09:20:32 +01:00
Denys Vlasenko
54214c38db
bc: fix "bc -v" printing version info twice, and not exiting
...
function old new delta
bc_args 123 130 +7
bc_num_binary 150 148 -2
static.nullptr 4 - -4
bc_vm_run 1883 1874 -9
------------------------------------------------------------------------------
(add/remove: 0/1 grow/shrink: 1/2 up/down: 7/-15) Total: -8 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-06 09:07:06 +01:00
Denys Vlasenko
1ff1c70944
bc: make bc_vm_envArgs() NULL-terminate its argv, simplify bc_vm_envLen()
...
function old new delta
bc_num_ulong 92 103 +11
static.nullptr - 4 +4
bc_args 120 123 +3
static.bc_args_env_name 4 - -4
dc_main 49 41 -8
bc_main 49 41 -8
bc_vm_run 1917 1883 -34
------------------------------------------------------------------------------
(add/remove: 1/1 grow/shrink: 2/3 up/down: 18/-54) Total: -36 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-06 00:54:12 +01:00
Denys Vlasenko
e873ff9660
bc: if FEATURE_CLEAN_UP, clean up allocations on exits
...
Will have exitcode 1 even on "quit" and "halt", is it a problem?
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-06 00:29:22 +01:00
Denys Vlasenko
050b0fe9a7
bc: do not allow "()" as a valid expression
...
function old new delta
bc_parse_expr_empty_ok - 2178 +2178
bc_parse_expr 2178 49 -2129
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 0/1 up/down: 2178/-2129) Total: 49 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 22:40:44 +01:00
Denys Vlasenko
cca79a0064
bc: reorder functions, delete forward declarations, no code changes - part 2
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 21:15:46 +01:00
Denys Vlasenko
b0e3761410
bc: reorder functions, delete forward declarations, no code changes
...
Pure block moves of text
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 21:03:16 +01:00
Denys Vlasenko
aad652a69a
bc: remove unused strings
...
text data bss dec hex filename
987088 485 7296 994869 f2e35 busybox_old
987079 485 7296 994860 f2e2c busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 20:33:23 +01:00
Denys Vlasenko
452df923f7
bc: trivial simplification in bc_parse_return()
...
function old new delta
bc_parse_stmt 2276 2271 -5
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 20:28:26 +01:00
Denys Vlasenko
657d6bb262
bc: fix "warning: 's' may be used uninitialized in this function"
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 20:25:03 +01:00
Denys Vlasenko
bcb62a7f11
bc: code shrink
...
function old new delta
bc_parse_expr 2151 2178 +27
bc_parse_exprs 60 - -60
------------------------------------------------------------------------------
(add/remove: 0/1 grow/shrink: 2/0 up/down: 27/-60) Total: -33 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 20:17:48 +01:00
Denys Vlasenko
6543758b13
bc: code shrink
...
function old new delta
bc_parse_operator 181 184 +3
bc_parse_ops 50 25 -25
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/1 up/down: 3/-25) Total: -22 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 19:37:19 +01:00
Denys Vlasenko
f381a88234
bc: make division operation interruptible
...
function old new delta
bc_num_d 564 584 +20
bc_num_r 230 245 +15
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/0 up/down: 35/0) Total: 35 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 19:21:34 +01:00
Denys Vlasenko
b3cb90124b
bc: use unsigned division by 10 instead of signed
...
function old new delta
bc_num_k 990 988 -2
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 19:05:32 +01:00
Denys Vlasenko
06fa65bd95
bc: move ^C check fro power calculation to multiplication
...
function old new delta
bc_num_k 971 990 +19
bc_num_p 507 478 -29
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/1 up/down: 19/-29) Total: -10 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 19:00:58 +01:00
Denys Vlasenko
b692c2faf1
bc: bc_num_k(): move carry,i,j,len to inner scope
...
This might help compiler
function old new delta
bc_num_k 957 971 +14
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 18:56:14 +01:00
Denys Vlasenko
0d7e46b1de
bc: tweak error messages
...
function old new delta
bc_lex_token 1285 1299 +14
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 18:31:19 +01:00
Denys Vlasenko
0064679915
bc: fix inverted POSIXness test, improve messages, commonalize message strings
...
function old new delta
bc_lex_token 1251 1285 +34
bc_POSIX_does_not_allow_bool_ops_this_is_bad - 25 +25
bc_POSIX_does_not_allow_empty_X_expression_in_for - 20 +20
bc_POSIX_does_not_allow - 20 +20
bc_parse_expr 2146 2151 +5
bc_num_ulong 103 92 -11
------------------------------------------------------------------------------
(add/remove: 3/0 grow/shrink: 2/1 up/down: 104/-11) Total: 93 bytes
text data bss dec hex filename
987210 485 7296 994991 f2eaf busybox_old
987084 485 7296 994865 f2e31 busybox_unstripped
^^^^^^^
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 18:12:27 +01:00
Denys Vlasenko
5318f81fbe
bc: print error line numbers
...
FILE:
print 1
print "
$ busybox bc -q FILE
bc: FILE:2: string end could not be found
ready for more input
>>> _
function old new delta
bc_verror_msg - 99 +99
bc_lex_file 12 28 +16
bc_lex_next 77 92 +15
dc_lex_token 687 701 +14
bc_lex_token 1237 1251 +14
bc_posix_error_fmt 90 58 -32
bc_error_fmt 70 36 -34
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 4/2 up/down: 158/-66) Total: 92 bytes
text data bss dec hex filename
987108 485 7296 994889 f2e49 busybox_old
987210 485 7296 994991 f2eaf busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 17:48:01 +01:00
Denys Vlasenko
08c033c406
bc: optimize pushing zero bytes to vectors
...
function old new delta
bc_vec_pushZeroByte - 10 +10
bc_vm_run 1919 1917 -2
bc_vec_string 61 59 -2
bc_vec_concat 68 66 -2
bc_parse_create 170 168 -2
bc_lex_number 298 296 -2
dc_lex_token 691 687 -4
bc_read_line 314 303 -11
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 0/7 up/down: 10/-25) Total: -15 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 16:55:08 +01:00
Denys Vlasenko
0409ad36a1
bc: restore printing of script name on errors
...
Examples:
On stdin, no file name is available:
$ echo 'print "' | busybox bc
bc: string end could not be found
When the same error is in file:
$ busybox bc FILE
bc 1.30.0.git
Copyright (c) 2018 Gavin D. Howard and contributors
Report bugs at: https://github.com/gavinhoward/bc
This is free software with ABSOLUTELY NO WARRANTY
FILE: string end could not be found
ready for more input
>>>
Line number printing to be added later...
function old new delta
bc_error_fmt 38 70 +32
bc_posix_error_fmt 60 90 +30
bc_vm_run 1900 1919 +19
bc_program_read 338 355 +17
bc_lex_file 15 12 -3
bc_program_stdin_name 8 - -8
------------------------------------------------------------------------------
(add/remove: 0/1 grow/shrink: 4/1 up/down: 98/-11) Total: 87 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 16:39:22 +01:00
Denys Vlasenko
0ad36c46c7
bc: do not check for errors when parsing/running internal library
...
function old new delta
bc_lib_name 4 - -4
bc_vm_run 1921 1900 -21
------------------------------------------------------------------------------
(add/remove: 0/1 grow/shrink: 0/1 up/down: 0/-25) Total: -25 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 16:21:43 +01:00
Denys Vlasenko
24fb2cd62f
bc: shrink error handling code by enabling tail-call optimization
...
function old new delta
bc_posix_error_fmt - 60 +60
bc_error_fmt - 38 +38
bc_error_bad_character - 17 +17
bc_parse_auto 302 313 +11
bc_num_ulong 93 103 +10
bc_error_variable_is_wrong_type - 10 +10
bc_error_stack_has_too_few_elements - 10 +10
bc_error_nested_read_call - 10 +10
bc_error_bad_token - 10 +10
bc_error_bad_expression - 10 +10
bc_num_d 561 564 +3
bc_program_assign 484 486 +2
dc_parse_parse 60 59 -1
bc_program_num 1130 1129 -1
bc_program_call 367 366 -1
bc_parse_stmt 2277 2276 -1
bc_lex_number 299 298 -1
bc_lex_name 91 90 -1
bc_func_insert 98 97 -1
bc_num_shift 74 72 -2
bc_vm_run 1924 1921 -3
bc_parse_endBody 424 420 -4
bc_lex_next 81 77 -4
bc_program_read 343 338 -5
bc_program_asciify 469 464 -5
bc_program_pushVar 221 215 -6
bc_program_print 784 778 -6
bc_program_prep 99 93 -6
bc_program_assignStr 167 161 -6
bc_parse_else 143 137 -6
bc_parse_body 124 118 -6
dc_parse_register 61 53 -8
dc_lex_token 699 691 -8
bc_program_modexp 756 746 -10
bc_parse_name 593 581 -12
dc_parse_expr 775 762 -13
bc_program_copyToVar 336 323 -13
bc_program_binOpPrep 324 311 -13
bc_program_execStr 561 543 -18
bc_program_exec 4150 4132 -18
bc_parse_parse 483 464 -19
bc_error 38 14 -24
bc_lex_token 1266 1237 -29
bc_posix_error 60 14 -46
bc_parse_expr 2194 2146 -48
------------------------------------------------------------------------------
(add/remove: 8/0 grow/shrink: 4/33 up/down: 191/-345) Total: -154 bytes
text data bss dec hex filename
987226 485 7296 995007 f2ebf busybox_old
987072 485 7296 994853 f2e25 busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 16:03:46 +01:00
Denys Vlasenko
f359e004b0
bc: make 2^1000000 interruptible faster
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
68cc0a676e
bc: remove tabs from internal library
...
function old new delta
bc_lib 1877 1674 -203
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
51fb8aa5c1
bc: store library in ASCII, shrink keyword parsing code
...
Also, use ARRAY_SIZE() where appropriate
function old new delta
bc_lib 1878 1877 -1
bc_program_index 66 64 -2
bc_lex_token 1282 1266 -16
bc_lex_kws 220 160 -60
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/4 up/down: 0/-79) Total: -79 bytes
text data bss dec hex filename
987518 485 7296 995299 f2fe3 busybox_old
987440 485 7296 995221 f2f95 busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
cb9a99f3bb
bc: drop bc_map_init() macro
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
7d62801db9
bc: create a few common functions
...
function old new delta
bc_char_vec_init - 12 +12
bc_vec_pop_all - 8 +8
bc_program_index 64 66 +2
bc_vec_string 64 61 -3
bc_vec_free 27 24 -3
bc_read_line 317 314 -3
bc_program_execStr 564 561 -3
bc_program_exec 4153 4150 -3
bc_program_copyToVar 340 336 -4
bc_parse_create 175 170 -5
dc_lex_token 705 699 -6
bc_program_reset 78 72 -6
bc_lex_number 305 299 -6
bc_program_read 353 343 -10
bc_program_addFunc 225 209 -16
bc_vm_run 1942 1924 -18
bc_parse_reset 181 163 -18
------------------------------------------------------------------------------
(add/remove: 2/0 grow/shrink: 1/14 up/down: 22/-104) Total: -82 bytes
text data bss dec hex filename
987600 485 7296 995381 f3035 busybox_old
987518 485 7296 995299 f2fe3 busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
d5f7703abb
bc: rewrite "BOOL * EXPR" idiom as if() statement
...
function old new delta
bc_program_index 66 64 -2
bc_program_num 1147 1130 -17
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-19) Total: -19 bytes
text data bss dec hex filename
987619 485 7296 995400 f3048 busybox_old
987600 485 7296 995381 f3035 busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
17c5472c5a
bc: switch to SA_RESTART signal handling
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
d70d4a0235
bc: get rid of G.tty and G.flags
...
G.flags == option_mask32
function old new delta
bc_args 97 120 +23
dc_main 48 49 +1
bc_main 48 49 +1
bc_error 42 38 -4
bc_posix_error 65 60 -5
bc_read_line 325 317 -8
dc_lex_token 714 705 -9
bc_vm_run 2039 1942 -97
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 3/5 up/down: 25/-123) Total: -98 bytes
text data bss dec hex filename
987717 485 7296 995498 f30aa busybox_old
987619 485 7296 995400 f3048 busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
9b70f197b4
bc: convert all status codes, remove bc_err_msgs[], bc_vm_error(), bc_vm_posixError()
...
function old new delta
bc_posix_error - 65 +65
bc_vm_run 1995 2039 +44
bc_err_line 7 - -7
bc_num_ulong 103 93 -10
bc_parse_parse 495 483 -12
bc_err_fmt 12 - -12
bc_warn_fmt 14 - -14
bc_parse_expr 2210 2194 -16
bc_program_reset 105 78 -27
bc_vm_process 130 94 -36
bc_parse_stmt 2313 2277 -36
bc_err_msgs 60 - -60
bc_lex_token 1367 1282 -85
bc_vm_error 143 - -143
bc_vm_posixError 189 - -189
------------------------------------------------------------------------------
(add/remove: 1/6 grow/shrink: 1/7 up/down: 109/-647) Total: -538 bytes
text data bss dec hex filename
988258 485 7296 996039 f32c7 busybox_old
987717 485 7296 995498 f30aa busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
60cf747b6c
bc: convert all non-POSIX BC_STATUS_foo codes
...
function old new delta
bc_program_asciify - 469 +469
bc_parse_parse 432 495 +63
dc_parse_expr 727 775 +48
bc_vm_run 1955 1995 +40
bc_program_num 1115 1147 +32
bc_program_binOpPrep 296 324 +28
static.msg - 24 +24
bc_parse_name 570 593 +23
bc_lex_token 1344 1367 +23
dc_lex_token 695 714 +19
bc_num_ulong 85 103 +18
bc_program_read 336 353 +17
dc_parse_parse 47 60 +13
bc_parse_stmt 2301 2313 +12
bc_parse_auto 291 302 +11
bc_program_prep 89 99 +10
bc_lex_next 71 81 +10
dc_parse_register 52 61 +9
bc_program_print 775 784 +9
bc_func_insert 89 98 +9
bc_program_assignStr 159 167 +8
bc_program_assign 476 484 +8
bc_parse_body 116 124 +8
bc_lex_name 83 91 +8
bc_program_pushVar 215 221 +6
bc_parse_text 141 147 +6
bc_num_shift 68 74 +6
bc_num_p 472 478 +6
bc_program_execStr 559 564 +5
bc_parse_else 139 143 +4
bc_lex_number 301 305 +4
bc_num_d 558 561 +3
bc_parse_endBody 422 424 +2
bc_num_r 231 230 -1
bc_program_copyToVar 343 340 -3
bc_program_call 372 367 -5
bc_parse_expr 2215 2210 -5
bc_program_modexp 763 756 -7
bc_err_msgs 164 60 -104
bc_program_pushArray 136 - -136
bc_program_exec 4453 4153 -300
------------------------------------------------------------------------------
(add/remove: 2/1 grow/shrink: 31/7 up/down: 961/-561) Total: 400 bytes
text data bss dec hex filename
987766 485 7296 995547 f30db busybox_old
988258 485 7296 996039 f32c7 busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
d38af48e0a
bc: convert BC_STATUS_EXEC_SIGNAL - its message string was never used
...
function old new delta
bc_vm_process 132 130 -2
bc_err_msgs 168 164 -4
dc_parse_parse 52 47 -5
bc_parse_reset 187 181 -6
bc_program_ready_msg 22 - -22
bc_program_exec 4478 4453 -25
bc_parse_parse 461 432 -29
bc_program_reset 159 105 -54
------------------------------------------------------------------------------
(add/remove: 0/1 grow/shrink: 0/7 up/down: 0/-147) Total: -147 bytes
text data bss dec hex filename
987923 485 7296 995704 f3178 busybox_old
987766 485 7296 995547 f30db busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
abbc433d29
bc: convert BC_STATUS_PARSE_NO_AUTO
...
function old new delta
bc_parse_auto 275 291 +16
bc_err_msgs 172 168 -4
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/1 up/down: 16/-4) Total: 12 bytes
text data bss dec hex filename
987911 485 7296 995692 f316c busybox_old
987923 485 7296 995704 f3178 busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
04a1c763a6
bc: convert BC_STATUS_EXEC_MISMATCHED_PARAMS and BC_STATUS_EXEC_UNDEFINED_FUNC
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
a02f84472a
bc: BC_STATUS_VEC_ITEM_EXISTS is not a real error code, its message was never used
...
It was only used to indicate rusult of bc_map_insert() - did we insert, or
did we find that this key is already in the map?
function old new delta
bc_map_insert 142 145 +3
bc_program_addFunc 226 225 -1
bc_err_msgs 184 180 -4
bc_program_search 152 143 -9
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/3 up/down: 3/-14) Total: -11 bytes
text data bss dec hex filename
987904 485 7296 995685 f3165 busybox_old
987873 485 7296 995654 f3146 busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
bc5ce66617
bc: simplify bc_lex_comment()
...
function old new delta
bc_lex_token 1369 1344 -25
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
c1c2470f84
bc: handle BIN_FILE and LEX_BAD_CHAR errors at the site of detection
...
The most informative message can be generated at the location
where error is detected. The "error codes" are stupid:
print error meesage immediately, then just return "there was an error"
indicator.
All error codes will be converted. For now, converting these two.
For now, this and following changes will degrade error messages
quality. For example, file name and line number printouts may be lost.
This will be re-added later.
This change anlso fixes handling of invalid stdin input:
this used to cause interactive bc to exit:
....
>>> ς
bc: illegal character 0xcf
bc: illegal character 0x82
>>> _
function old new delta
bc_error - 42 +42
bc_lex_token 1333 1369 +36
dc_lex_token 675 695 +20
bc_read_line 311 325 +14
bc_num_a 456 454 -2
bc_err_msgs 188 184 -4
bc_num_ulong 95 85 -10
bc_vm_run 1984 1955 -29
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 3/4 up/down: 112/-45) Total: 67 bytes
text data bss dec hex filename
987828 485 7296 995609 f3119 busybox_old
987929 485 7296 995710 f317e busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
d4744adf35
bc: eliminate BC_STATUS_INPUT_EOF
...
function old new delta
fflush_and_check - 36 +36
bc_num_a 445 456 +11
bc_num_ulong 85 95 +10
bc_vm_run 1978 1984 +6
bc_num_s 246 252 +6
bc_err_msgs 192 188 -4
quit 38 32 -6
bc_vm_process 139 132 -7
bc_program_reset 172 159 -13
bc_parse_create 192 175 -17
bc_read_line 349 311 -38
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 4/6 up/down: 69/-85) Total: -16 bytes
text data bss dec hex filename
987844 485 7296 995625 f3129 busybox_old
987828 485 7296 995609 f3119 busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
cfdc1334c3
bc: handle "limits" and "quit" immediately at parse time
...
No need to propagate a special exit code.
function old new delta
bc_parse_stmt 2197 2301 +104
quit - 38 +38
bc_read_line 344 349 +5
bc_program_reset 174 172 -2
bc_num_s 252 246 -6
bc_num_a 454 445 -9
bc_parse_parse 471 461 -10
bc_num_ulong 95 85 -10
bc_program_exec 4500 4478 -22
bc_vm_run 2006 1978 -28
bc_vm_process 291 139 -152
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 2/8 up/down: 147/-239) Total: -92 bytes
text data bss dec hex filename
987936 485 7296 995717 f3185 busybox_old
987844 485 7296 995625 f3129 busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
01cabafd05
bc": drop unused error codes and strings
...
function old new delta
bc_err_msgs 216 192 -24
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-24) Total: -24 bytes
text data bss dec hex filename
988122 485 7296 995903 f323f busybox_old
987936 485 7296 995717 f3185 busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
b8860a8892
bc: remove "error ids": serve no useful purpose, error message should be explanatory enough
...
function old new delta
bc_warn_fmt 17 14 -3
bc_err_fmt 15 12 -3
bc_vm_posixError 205 189 -16
bc_vm_error 156 138 -18
bc_errs 28 - -28
bc_err_ids 58 - -58
------------------------------------------------------------------------------
(add/remove: 0/2 grow/shrink: 0/4 up/down: 0/-126) Total: -126 bytes
text data bss dec hex filename
988288 485 7296 996069 f32e5 busybox_old
988122 485 7296 995903 f323f busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
1f67e935ac
bc: reduce forward declarations
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
d9d66556d7
bc: use smaller datatypes for limits, match GNU bc 'limits' output
...
function old new delta
bc_vm_process 315 291 -24
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-24) Total: -24 bytes
text data bss dec hex filename
988303 485 7296 996084 f32f4 busybox_old
988273 485 7296 996054 f32d6 busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
416ce76bcd
bc: better handle optional args of bc_program_pushVar()
...
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
9721f6c8b0
bc: tweak help text
...
-v is supported but not shown
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
a0c421c118
bc: simplify bc_vm_stdin()
...
function old new delta
bc_vm_run 2020 2006 -14
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
71e1fc6b37
bc: only check for ^C in bc_program_exec() main loop
...
Checking it in individual operations such as SQRT is not necessary
since they usually do not take very long to complete. We repeatedly return
to main loop.
TODO: re-add more fine-grained ^C checks - but only with examples where it is
actually needed. E.g. I suspect simplest ops like addition or compare won't need it.
function old new delta
bc_program_index 66 64 -2
bc_num_s 258 246 -12
bc_num_cmp 294 275 -19
bc_num_compare 84 59 -25
bc_num_subArrays 74 47 -27
bc_num_a 474 445 -29
bc_program_exec 4530 4500 -30
bc_num_p 518 472 -46
bc_num_d 604 558 -46
bc_num_k 1005 957 -48
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/10 up/down: 0/-284) Total: -284 bytes
text data bss dec hex filename
988601 485 7296 996382 f341e busybox_old
988317 485 7296 996098 f3302 busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
df51539ed0
bc: simpler calling convention for bc_read_file(), bc_program_search()
...
function old new delta
bc_vm_run 1854 2020 +166
bc_program_assign 482 476 -6
bc_program_pushVar 225 215 -10
bc_program_call 366 356 -10
bc_program_num 1126 1115 -11
bc_program_copyToVar 354 343 -11
bc_program_search 164 152 -12
bc_program_execStr 573 559 -14
bc_program_exec 4544 4530 -14
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/8 up/down: 166/-88) Total: 78 bytes
text data bss dec hex filename
988523 485 7296 996304 f33d0 busybox_old
988601 485 7296 996382 f341e busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
e3b4f23cf3
bc: bc_num_ulong2num(), bc_program_pushGlobal(), bc_program_stackLen() never fail
...
function old new delta
bc_num_ulong2num 66 62 -4
bc_num_printNum 572 563 -9
bc_program_exec 4562 4544 -18
bc_program_num 1147 1126 -21
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/4 up/down: 0/-52) Total: -52 bytes
text data bss dec hex filename
988575 485 7296 996356 f3404 busybox_old
988523 485 7296 996304 f33d0 busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
a1d3ca2455
bc: stop passing around pointers to G.prog, they are all constant
...
function old new delta
bc_program_exec 4523 4562 +39
bc_program_assign 450 482 +32
bc_program_assignStr 131 159 +28
bc_program_print 762 775 +13
bc_program_num 1134 1147 +13
bc_program_search 154 164 +10
bc_num_ulong 85 95 +10
dc_parse_expr 719 727 +8
bc_program_retire 34 40 +6
bc_program_reset 168 174 +6
bc_program_binOpRetire 50 56 +6
bc_program_addFunc 220 226 +6
bc_program_prep 88 89 +1
dc_parse_init 18 17 -1
bc_program_copyToVar 355 354 -1
bc_parse_text 142 141 -1
bc_parse_number 88 87 -1
bc_parse_init 18 17 -1
bc_parse_endBody 423 422 -1
common_parse_init 29 26 -3
bc_parse_string 103 100 -3
bc_parse_addFunc 44 41 -3
bc_program_call 371 366 -5
bc_program_binOpPrep 301 296 -5
bc_program_read 342 336 -6
bc_parse_create 198 192 -6
bc_program_pushArray 143 136 -7
bc_parse_reset 194 187 -7
bc_vm_process 323 315 -8
bc_program_pushVar 236 225 -11
bc_vm_run 1872 1854 -18
bc_parse_name 590 570 -20
bc_program_execStr 594 573 -21
bc_program_modexp 793 763 -30
bc_program_printStream 172 - -172
------------------------------------------------------------------------------
(add/remove: 0/1 grow/shrink: 13/21 up/down: 178/-331) Total: -153 bytes
text data bss dec hex filename
988728 485 7296 996509 f349d busybox_old
988575 485 7296 996356 f3404 busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
f6c1da5ff3
bc: select parse_init() and parse_expr() using IS_BC, not function pointers
...
function old new delta
common_parse_expr - 62 +62
common_parse_init - 29 +29
dc_parse_parse 53 52 -1
dc_parse_expr 723 719 -4
bc_program_execStr 606 594 -12
dc_parse_init 33 18 -15
bc_parse_init 33 18 -15
bc_parse_expression 39 - -39
bc_vm_run 1923 1872 -51
------------------------------------------------------------------------------
(add/remove: 2/1 grow/shrink: 0/6 up/down: 91/-137) Total: -46 bytes
text data bss dec hex filename
988774 485 7296 996555 f34cb busybox_old
988728 485 7296 996509 f349d busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
785e4b3057
bc: propagate fixed arguments into callees
...
Looks like there is only one "BcProgram" object, &G.prog.
function old new delta
bc_program_exec 4401 4523 +122
bc_program_execStr 579 606 +27
bc_program_read 323 342 +19
bc_args 83 97 +14
bc_vm_process 327 323 -4
bc_num_ulong 95 85 -10
dc_main 62 48 -14
bc_main 62 48 -14
bc_vm_run 2317 1923 -394
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 4/5 up/down: 182/-436) Total: -254 bytes
text data bss dec hex filename
989028 485 7296 996809 f35c9 busybox_old
988774 485 7296 996555 f34cb busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
ab3c568fd8
bc: simplify ^C handling
...
It's still buggy: if SIGINT would interrupt e.g. output write(),
the result would not be as intended:
>>> while ( 1 ) print 1
...
11111111111111111111111111111111111111111111111111111111111111111111\
11111111111111111111111111111111111111111111111111111111111111111111\
^Cready for more input
interrupt (type "quit" to exit)
>>> bc: output error
function old new delta
dc_parse_parse 58 53 -5
bc_parse_parse 476 471 -5
bc_num_d 609 604 -5
bc_num_cmp 299 294 -5
bc_num_compare 90 84 -6
bc_parse_expr 2222 2215 -7
bc_num_subArrays 82 74 -8
dc_main 72 62 -10
bc_main 72 62 -10
bc_program_exec 4413 4401 -12
bc_num_a 491 474 -17
bc_read_line 364 344 -20
bc_num_p 540 518 -22
bc_program_reset 192 168 -24
bc_num_k 1031 1005 -26
bc_vm_run 2382 2317 -65
bc_vm_sig 97 - -97
------------------------------------------------------------------------------
(add/remove: 0/1 grow/shrink: 0/16 up/down: 0/-344) Total: -344 bytes
text data bss dec hex filename
989372 485 7296 997153 f3721 busybox_old
989028 485 7296 996809 f35c9 busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
6d9146ab56
bc: convert to "G trick" - this returns bc to zero bss increase
...
function old new delta
bc_num_p 518 540 +22
bc_num_k 1010 1031 +21
bc_vm_process 312 327 +15
bc_program_exec 4401 4413 +12
bc_vm_posixError 194 205 +11
bc_num_a 480 491 +11
bc_program_reset 182 192 +10
bc_vm_sig 88 97 +9
bc_vm_error 148 156 +8
bc_parse_expr 2215 2222 +7
bc_num_compare 84 90 +6
dc_parse_parse 53 58 +5
dc_lex_token 670 675 +5
bc_read_line 359 364 +5
bc_parse_parse 471 476 +5
bc_num_cmp 294 299 +5
bc_num_subArrays 84 82 -2
bc_num_d 614 609 -5
dc_main 80 72 -8
bc_main 80 72 -8
bcg 40 - -40
bc_vm_run 2569 2382 -187
------------------------------------------------------------------------------
(add/remove: 0/1 grow/shrink: 16/5 up/down: 157/-250) Total: -93 bytes
text data bss dec hex filename
989425 485 7336 997246 f377e busybox_old
989372 485 7296 997153 f3721 busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
5a9fef5b59
bc: simplify, and restore ^C, fix ^D handling
...
^D used to enter infinite loop
function old new delta
bc_read_line 342 359 +17
bc_args_opt 8 - -8
dc_sig_msg 31 - -31
bc_sig_msg 34 - -34
bc_vm_run 2608 2569 -39
bc_args 123 83 -40
bc_args_lopt 81 - -81
------------------------------------------------------------------------------
(add/remove: 0/4 grow/shrink: 1/2 up/down: 17/-233) Total: -216 bytes
text data bss dec hex filename
989491 485 7336 997312 f37c0 busybox_old
989425 485 7336 997246 f377e busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
00d7779a35
bc: simplify, stop testing for IO errors on every output
...
function old new delta
bc_read_line 297 342 +45
bc_vm_run 2601 2608 +7
bc_program_reset 178 182 +4
bc_args 125 123 -2
dc_name 3 - -3
bc_name 3 - -3
bc_program_printStream 176 172 -4
bcg 48 40 -8
dc_main 97 80 -17
bc_main 97 80 -17
bc_vm_fflush 21 - -21
bc_vm_puts 23 - -23
bc_vm_printf 36 - -36
bc_vm_putchar 46 - -46
bc_vm_exit 46 - -46
bc_vm_process 361 312 -49
bc_vm_info 76 19 -57
bc_copyright 155 - -155
------------------------------------------------------------------------------
(add/remove: 0/8 grow/shrink: 3/7 up/down: 56/-487) Total: -431 bytes
text data bss dec hex filename
989722 485 7344 997551 f38af busybox_old
989491 485 7336 997312 f37c0 busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:42:52 +01:00
Denys Vlasenko
ef869ec728
bc: fix warnings, initial cleanups
...
function old new delta
bc_program_exec - 4401 +4401
bc_vm_run - 2601 +2601
bc_parse_expr - 2215 +2215
bc_parse_stmt - 2197 +2197
bc_lib - 1878 +1878
bc_lex_token - 1333 +1333
bc_program_num - 1134 +1134
bc_num_k - 1010 +1010
bc_program_modexp - 793 +793
bc_program_print - 762 +762
dc_parse_expr - 723 +723
dc_lex_token - 670 +670
bc_num_d - 614 +614
bc_parse_name - 590 +590
bc_program_execStr - 579 +579
bc_num_printNum - 572 +572
bc_num_p - 518 +518
bc_num_a - 480 +480
bc_parse_parse - 471 +471
bc_program_assign - 450 +450
bc_parse_endBody - 423 +423
bc_program_call - 371 +371
dc_lex_tokens - 364 +364
bc_vm_process - 361 +361
bc_program_copyToVar - 355 +355
dc_parse_insts - 332 +332
bc_program_read - 323 +323
bc_program_binOpPrep - 301 +301
bc_lex_number - 301 +301
bc_read_line - 297 +297
bc_num_cmp - 294 +294
bc_num_m - 287 +287
bc_parse_auto - 275 +275
bc_num_s - 258 +258
bc_program_pushVar - 236 +236
bc_num_r - 231 +231
bc_program_addFunc - 220 +220
bc_lex_kws - 220 +220
bc_err_msgs - 216 +216
bc_parse_create - 198 +198
bc_vm_posixError - 194 +194
bc_parse_reset - 194 +194
bc_parse_operator - 181 +181
bc_program_reset - 178 +178
bc_program_printStream - 176 +176
bc_num_divmod - 168 +168
bc_copyright - 155 +155
bc_program_search - 154 +154
bc_num_binary - 150 +150
bc_vm_error - 148 +148
bc_program_pushArray - 143 +143
bc_parse_text - 142 +142
bc_num_printDigits - 142 +142
bc_map_insert - 142 +142
bc_parse_else - 139 +139
bc_program_assignStr - 131 +131
bc_args - 125 +125
dc_parse_mem - 116 +116
bc_parse_body - 116 +116
bc_num_split - 113 +113
bc_num_sub - 112 +112
bc_num_add - 112 +112
packed_usage 32958 33066 +108
bc_num_rem - 104 +104
bc_parse_string - 103 +103
bc_main - 97 +97
bc_num_ulong - 95 +95
bc_func_insert - 89 +89
bc_vm_sig - 88 +88
bc_program_prep - 88 +88
bc_parse_number - 88 +88
bc_array_expand - 88 +88
bc_num_subArrays - 84 +84
bc_num_compare - 84 +84
bc_lex_name - 83 +83
bc_args_lopt - 81 +81
bc_parse_pushIndex - 80 +80
bc_num_mul - 80 +80
bc_num_mod - 80 +80
bc_num_div - 80 +80
bc_vm_info - 76 +76
bc_program_name - 75 +75
bc_map_find - 71 +71
bc_lex_next - 71 +71
bc_num_printHex - 70 +70
bc_vec_concat - 68 +68
bc_num_shift - 68 +68
bc_num_extend - 68 +68
bc_program_index - 66 +66
bc_num_ulong2num - 66 +66
bc_num_retireMul - 66 +66
bc_parse_noElse - 65 +65
bc_vec_string - 64 +64
bc_parse_pushName - 63 +63
bc_parse_exprs - 60 +60
bc_err_ids - 58 +58
bc_result_free - 57 +57
bc_vec_npop - 55 +55
dc_parse_parse - 53 +53
bc_vec_push - 53 +53
bc_parse_free - 53 +53
bc_num_inv - 53 +53
dc_parse_register - 52 +52
dc_lex_regs - 52 +52
bc_lex_whitespace - 52 +52
bc_num_copy - 51 +51
bc_program_binOpRetire - 50 +50
bc_parse_ops - 50 +50
bc_map_index - 50 +50
bcg - 48 +48
bc_num_init - 48 +48
bc_parse_startBody - 47 +47
bc_num_pow - 47 +47
bc_vm_putchar - 46 +46
bc_vm_exit - 46 +46
bc_num_clean - 45 +45
bc_parse_addFunc - 44 +44
bc_vec_grow - 42 +42
bc_program_len - 42 +42
bc_num_truncate - 42 +42
bc_array_init - 42 +42
bc_parse_expression - 39 +39
bc_lex_lineComment - 39 +39
bc_num_expand - 38 +38
bc_vec_init - 37 +37
bc_vm_printf - 36 +36
bc_num_printNewline - 36 +36
bc_func_free - 35 +35
bc_sig_msg - 34 +34
bc_program_retire - 34 +34
bc_lex_assign - 34 +34
dc_parse_init - 33 +33
bc_parse_init - 33 +33
dc_sig_msg - 31 +31
bc_vec_expand - 30 +30
bc_num_ten - 30 +30
bc_num_one - 28 +28
bc_errs - 28 +28
bc_vec_free - 27 +27
bc_program_ops - 24 +24
bc_vm_puts - 23 +23
bc_num_printChar - 23 +23
bc_program_ready_msg - 22 +22
bc_vm_fflush - 21 +21
dc_main 77 97 +20
bc_parse_next_rel - 20 +20
bc_parse_next_read - 20 +20
bc_parse_next_print - 20 +20
bc_parse_next_param - 20 +20
bc_parse_next_for - 20 +20
bc_parse_next_expr - 20 +20
bc_parse_next_elem - 20 +20
bc_warn_fmt - 17 +17
bc_vec_pushByte - 15 +15
bc_string_free - 15 +15
bc_num_setToZero - 15 +15
bc_num_free - 15 +15
bc_lex_file - 15 +15
bc_id_free - 15 +15
bc_err_fmt - 15 +15
bc_vec_item_rev - 14 +14
bc_id_cmp - 12 +12
bc_num_zero - 11 +11
bc_vec_item - 9 +9
bc_program_stdin_name - 8 +8
bc_program_scale - 8 +8
bc_args_opt - 8 +8
bc_func_read - 7 +7
bc_func_main - 7 +7
bc_err_line - 7 +7
bc_lib_name - 4 +4
bc_args_env_name - 4 +4
applet_main 1604 1608 +4
dc_name - 3 +3
bc_name - 3 +3
applet_names 2781 2784 +3
static.bases 5 - -5
check_under 20 - -20
pop 24 - -24
print_no_pop 32 - -32
sub 34 - -34
divide 34 - -34
mul 37 - -37
add 37 - -37
push 38 - -38
print_stack_no_pop 40 - -40
not 72 - -72
set_output_base 95 - -95
or 103 - -103
eor 103 - -103
and 103 - -103
mod 105 - -105
stack_machine 116 - -116
operators 144 - -144
print_base 230 - -230
------------------------------------------------------------------------------
(add/remove: 173/20 grow/shrink: 4/0 up/down: 38089/-1372) Total: 36717 bytes
text data bss dec hex filename
950181 485 7296 957962 e9e0a busybox_old
989722 485 7344 997551 f38af busybox_unstripped
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:42:48 +01:00
Gavin Howard
01055ba89a
bc: new applet, throws warning
...
Signed-off-by: Gavin Howard <yzena.tech@gmail.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:40:38 +01:00