Commit Graph

1536 Commits

Author SHA1 Message Date
Denys Vlasenko
374d2c47ec bc: remove special-cased assignment to ibase, it works correctly with general rules
function                                             old     new   delta
zxc_program_print                                    683     681      -2
zxc_program_prep                                      91      89      -2
zxc_program_copyToVar                                300     298      -2
zdc_program_printStream                              146     144      -2
zdc_program_execStr                                  520     518      -2
zdc_program_asciify                                  370     368      -2
zxc_program_exec                                    4016    4012      -4
zdc_program_modexp                                   694     688      -6
zxc_program_num                                     1020     995     -25
zxc_program_binOpPrep                                306     243     -63
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/10 up/down: 0/-110)          Total: -110 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-29 14:52:30 +01:00
Denys Vlasenko
d5b0fa6abf bc: more fixes for unusual input bases
function                                             old     new   delta
zxc_program_num                                      990    1020     +30
zxc_lex_number                                       172     202     +30
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/0 up/down: 60/0)               Total: 60 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-29 03:08:12 +01:00
Denys Vlasenko
e16a5223d2 bc: fix handling of "digits" above 9
function                                             old     new   delta
zxc_lex_next                                        1573    1608     +35
xc_parse_pushIndex                                    58      56      -2
xc_program_index                                      71      63      -8
zxc_program_num                                     1022     990     -32
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/3 up/down: 35/-42)             Total: -7 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-29 02:24:19 +01:00
Denys Vlasenko
b86b39bfda config: more tweaks
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-28 17:52:43 +01:00
Denys Vlasenko
cdadad58a1 bc: bc enables FEATURE_DC_BIG, for correct dc testsuite operation
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-28 15:13:23 +01:00
Denys Vlasenko
1476760600 bc: rename config options
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-28 13:32:04 +01:00
Denys Vlasenko
b097a84d62 config: update size information
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-28 03:20:17 +01:00
Denys Vlasenko
10bde14292 bc: rename functions common to bc and dc as xc_FOO()
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-27 18:23:58 +01:00
Denys Vlasenko
db8d607514 bc: G.prog.zero does not need initializing num[] vector
function                                             old     new   delta
bc_vm_init                                           676     665     -11

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-27 18:08:49 +01:00
Denys Vlasenko
3d27d435db randomconfig fixes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-27 18:03:20 +01:00
Denys Vlasenko
2beb1f6faf bc: use ALIGN1 where appropriate
text	   data	    bss	    dec	    hex	filename
 980138	    485	   7296	 987919	  f130f	busybox_old
 980128	    485	   7296	 987909	  f1305	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-26 21:17:12 +01:00
Denys Vlasenko
8af11087b2 bc: undo debugging change, add a small optimization
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-26 21:01:41 +01:00
Denys Vlasenko
ab9a98602f bc: simple speedups
function                                             old     new   delta
bc_parse_pushName                                     20      56     +36
bc_program_index                                      47      71     +24
bc_parse_pushIndex                                    52      58      +6
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 3/0 up/down: 66/0)               Total: 66 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-26 20:30:47 +01:00
Denys Vlasenko
f706a18f33 bc: use '\0' insteads of 0xff (BC_PARSE_STREND) as name terminator
function                                             old     new   delta
zdc_program_printStream                                -     146    +146
zbc_program_exec                                    4003    4016     +13
zdc_parse_expr                                       473     470      -3
bc_parse_pushName                                     31      20     -11
bc_program_name                                       63      34     -29
zbc_program_pushArray                                147       -    -147
------------------------------------------------------------------------------
(add/remove: 1/1 grow/shrink: 1/3 up/down: 159/-190)          Total: -31 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-26 20:02:27 +01:00
Denys Vlasenko
1c69ec1597 bc: reduce indentation, no code changes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-26 19:24:15 +01:00
Denys Vlasenko
8a56e3643f bc: fix "bc only" build
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-26 19:09:23 +01:00
Denys Vlasenko
1e87b97da6 bc: fix "dc only" build
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-26 19:06:05 +01:00
Denys Vlasenko
2f7352b4f5 bc: comment out code which appears to be never reached
function                                             old     new   delta
zbc_lex_next                                        1587    1568     -19

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-26 18:59:42 +01:00
Denys Vlasenko
b1b7996a2a bc: remove all logic for multi-line buffering
function                                             old     new   delta
zbc_vm_process                                       865     874      +9
zbc_parse_text_init                                   51      38     -13
bc_read_line                                         394     345     -49
peek_inbuf                                           292      69    -223
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/3 up/down: 9/-285)           Total: -276 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-26 18:46:03 +01:00
Denys Vlasenko
7d32e25bf3 bc: prepare for char-by-char input handling
function                                             old     new   delta
peek_inbuf                                             -     292    +292
parse_lex_by_checking_eq_sign                          -      26     +26
eat_inbuf                                              -      22     +22
zbc_vm_execute_FILE                                   52      61      +9
bc_lex_lineComment                                    29      30      +1
zbc_lex_number                                       174     172      -2
bc_vm_run                                            104      99      -5
zbc_num_divmod                                       156     150      -6
bc_lex_file                                           24       -     -24
bc_lex_assign                                         26       -     -26
zbc_lex_next                                        1982    1587    -395
------------------------------------------------------------------------------
(add/remove: 3/2 grow/shrink: 2/4 up/down: 350/-458)         Total: -108 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-26 18:32:43 +01:00
Denys Vlasenko
63ad799384 bc: fix handling of comment/string interactions while buffering input
function                                             old     new   delta
zbc_lex_next                                        1965    1982     +17
zbc_num_divmod                                       150     156      +6
bc_read_line                                         411     394     -17
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/1 up/down: 23/-17)              Total: 6 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-26 12:23:05 +01:00
Denys Vlasenko
94576d2b97 bc: fix interactive handling of comments in strings and quotes in comments
function                                             old     new   delta
zbc_lex_next                                        1965    1979     +14

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-25 23:45:57 +01:00
Denys Vlasenko
c192b0442b bc: simplify input pointer manipulation while lexing
function                                             old     new   delta
bc_lex_name                                           70      68      -2
zbc_lex_number                                       177     174      -3
bc_vm_init                                           679     676      -3
bc_lex_whitespace                                     42      39      -3
zbc_parse_text_init                                   55      51      -4
bc_lex_lineComment                                    37      29      -8
bc_lex_assign                                         34      26      -8
zbc_lex_next                                        2039    1965     -74
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/8 up/down: 0/-105)           Total: -105 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-25 23:15:59 +01:00
Denys Vlasenko
ecb62edd47 bc: fold struct BcLex into BcParse
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-25 22:32:41 +01:00
Denys Vlasenko
6e6182342e bc: move BcLex::lex member to be the first in struct globals
function                                             old     new   delta
zbc_program_exec                                    3967    4003     +36
zdc_program_execStr                                  501     520     +19
zbc_posix_error_fmt                                   58      62      +4
bc_vm_init                                           675     679      +4
bc_read_line                                         407     411      +4
bc_error_fmt                                          36      40      +4
zdc_parse_register                                    45      44      -1
zdc_parse_exprs_until_eof                             28      27      -1
zbc_parse_text_init                                   56      55      -1
zbc_parse_stmt_allow_NLINE_before                     55      54      -1
zbc_lex_skip_if_at_NLINE                              19      18      -1
zbc_lex_number                                       178     177      -1
bc_parse_create                                       97      96      -1
bc_lex_whitespace                                     43      42      -1
bc_lex_name                                           71      70      -1
bc_lex_lineComment                                    38      37      -1
bc_lex_assign                                         35      34      -1
zdc_parse_expr                                       476     473      -3
bc_verror_msg                                         93      90      -3
bc_lex_file                                           27      24      -3
zbc_parse_name                                       453     448      -5
bc_parse_expr_empty_ok                              1776    1764     -12
zbc_vm_process                                       878     865     -13
zbc_parse_stmt_possibly_auto                        1451    1425     -26
zbc_lex_next                                        2075    2039     -36
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 6/19 up/down: 71/-112)          Total: -41 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-25 22:20:14 +01:00
Denys Vlasenko
0b0e8d0509 bc: rename some members and macros, no code changes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-25 21:44:10 +01:00
Denys Vlasenko
3f8752c33f bc: shorten error messages
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-25 21:28:25 +01:00
Gavin Howard
fa495ce498 bc: make it clear that the code is adapted
Signed-off-by: Gavin Howard <yzena.tech@gmail.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-25 20:53:15 +01:00
Denys Vlasenko
a2e62e3e50 bc: stop passing a pointer to G.prs down the call chain
function                                             old     new   delta
rewrite_label_to_current                              19      26      +7
bc_lex_assign                                         28      35      +7
zbc_lex_skip_if_at_NLINE                              14      19      +5
bc_parse_push                                         11      16      +5
bc_parse_operator                                    147     152      +5
bc_parse_create                                       92      97      +5
bc_lex_whitespace                                     38      43      +5
bc_lex_name                                           66      71      +5
bc_lex_lineComment                                    33      38      +5
zbc_lex_number                                       174     178      +4
zbc_parse_text_init                                   53      56      +3
zdc_parse_register                                    43      45      +2
zdc_parse_exprs_until_eof                             26      28      +2
bc_parse_free                                         38      40      +2
bc_lex_file                                           28      27      -1
zbc_parse_pushSTR                                     65      63      -2
bc_parse_expr_empty_ok                              1778    1776      -2
zbc_vm_execute_FILE                                   55      52      -3
bc_vm_init                                           678     675      -3
zbc_parse_stmt_allow_NLINE_before                     59      55      -4
bc_parse_pushNUM                                      80      74      -6
bc_parse_pushJUMP_ZERO                                27      21      -6
bc_parse_pushJUMP                                     27      21      -6
bc_vm_run                                            112     104      -8
bc_parse_pushName                                     39      31      -8
bc_parse_pushIndex                                    60      52      -8
zbc_parse_name                                       468     453     -15
zdc_program_execStr                                  524     501     -23
zdc_parse_mem                                         93      70     -23
zbc_program_exec                                    4003    3967     -36
zdc_parse_expr                                       518     476     -42
zbc_vm_process                                       923     878     -45
zbc_lex_next                                        2158    2070     -88
zbc_parse_stmt_possibly_auto                        1560    1451    -109
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 14/20 up/down: 62/-438)        Total: -376 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-25 20:40:55 +01:00
Denys Vlasenko
1fbe35a7d8 bc: make zbc_program_read() and zdc_program_execStr() use G.prs
function                                             old     new   delta
zbc_program_print                                    656     683     +27
zbc_program_exec                                    3976    4003     +27
zdc_program_execStr                                  512     524     +12
bc_num_printNewline                                   45      54      +9
bc_num_printHex                                       61      67      +6
bc_num_printDigits                                   131     137      +6
dc_num_printChar                                      21      24      +3
bc_vm_init                                           675     678      +3
zbc_program_assign                                   424     426      +2
bc_read_line                                         410     407      -3
bc_verror_msg                                         99      93      -6
zbc_lex_next                                        2167    2158      -9
zbc_vm_execute_FILE                                   67      55     -12
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 9/4 up/down: 95/-30)             Total: 65 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-25 19:38:13 +01:00
Denys Vlasenko
53e569c06b bc: fix interactive read()
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-25 19:37:23 +01:00
Denys Vlasenko
2638454464 bc: add code to detect errors like "print 1 print 2"
function                                             old     new   delta
zbc_vm_process                                       831     925     +94
zbc_program_exec                                    3964    3976     +12
zdc_program_execStr                                  506     512      +6
zbc_lex_next                                        2161    2167      +6
zbc_program_assign                                   419     424      +5
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 5/0 up/down: 123/0)             Total: 123 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-25 18:37:52 +01:00
Denys Vlasenko
5fa74b9efc bc: allow {break} and {continue} (allow RBRACE to terminate them)
function                                             old     new   delta
zbc_parse_stmt_possibly_auto                        1599    1560     -39

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-25 17:07:51 +01:00
Denys Vlasenko
d4b721cc8b bc: shrink parsing code a bit more, disallow "auto a b c" (without commas)
function                                             old     new   delta
bc_parse_expr_empty_ok                              1791    1785      -6
zbc_parse_stmt_possibly_auto                        1675    1599     -76
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-82)             Total: -82 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-25 16:39:01 +01:00
Denys Vlasenko
73b3ebc0e1 bc: simplify bc_parse_expr_empty_ok()
function                                             old     new   delta
bc_parse_expr_empty_ok                              1810    1791     -19

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-25 01:43:52 +01:00
Denys Vlasenko
d0238d83f0 bc: simplify bc_parse_expr_empty_ok()
function                                             old     new   delta
bc_parse_expr_empty_ok                              1819    1810      -9

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-25 01:21:16 +01:00
Denys Vlasenko
bb116031a0 bc: simplify bc_parse_expr_empty_ok()
function                                             old     new   delta
bc_parse_expr_empty_ok                              1846    1819     -27

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-25 01:16:37 +01:00
Denys Vlasenko
d897c9aca6 bc: BC_RESULT_ONE is bc-specific
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-24 23:41:31 +01:00
Denys Vlasenko
0c45bb22a0 bc: partially deinline BC_PARSE_LEAF() macro
function                                             old     new   delta
ok_in_expr                                             -      30     +30
bc_parse_expr_empty_ok                              1972    1846    -126
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 0/1 up/down: 30/-126)           Total: -96 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-24 23:22:40 +01:00
Denys Vlasenko
a17d95d0d0 bc: rename lexer variables, use smallints where appropriate
function                                             old     new   delta
bc_parse_expr_empty_ok                              1966    1972      +6
zdc_parse_expr                                       514     518      +4
zbc_lex_number                                       177     174      -3
dc_num_printChar                                      24      21      -3
bc_lex_whitespace                                     41      38      -3
bc_lex_name                                           69      66      -3
bc_lex_lineComment                                    36      33      -3
bc_lex_assign                                         31      28      -3
zbc_parse_name                                       472     468      -4
zbc_vm_process                                       836     831      -5
zdc_program_execStr                                  512     506      -6
zbc_parse_text_init                                   59      53      -6
bc_num_printNewline                                   51      45      -6
bc_num_printHex                                       67      61      -6
bc_num_printDigits                                   137     131      -6
zbc_program_assign                                   426     419      -7
zbc_parse_stmt_possibly_auto                        1682    1675      -7
zbc_program_exec                                    3977    3964     -13
zbc_program_print                                    683     656     -27
zbc_lex_next                                        2233    2161     -72
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/18 up/down: 10/-183)         Total: -173 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-24 22:55:54 +01:00
Denys Vlasenko
d279d809ac bc: fix "bc -s" only warning on "define f()<newline>", not exiting
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-24 18:28:56 +01:00
Denys Vlasenko
79587cb442 bc: POSIX error/warn functions can be 'z' functions too
In non-interactive config, they either return 'success', or do not return.

function                                             old     new   delta
zbc_posix_error_fmt                                   41      39      -2
bc_parse_expr_empty_ok                              1751    1744      -7
zbc_parse_stmt_possibly_auto                        1322    1314      -8
------------------------------------------------------------------------------
(add/remove: 5/5 grow/shrink: 0/2 up/down: 118/-135)          Total: -17 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-24 18:11:41 +01:00
Denys Vlasenko
65b6fe09c4 bc: remove unnecessary NULL initializers
function                                             old     new   delta
zbc_program_assign                                   442     426     -16
zbc_program_exec                                    4043    3977     -66
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-82)             Total: -82 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-24 17:21:31 +01:00
Denys Vlasenko
a5bf53e4bb bc: move relational LEXs before math LEXs - shorten dc_LEX_to_INST[]
function                                             old     new   delta
dc_LEX_to_INST                                        48      42      -6
zdc_parse_expr                                       523     514      -9
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-15)             Total: -15 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-24 17:07:20 +01:00
Denys Vlasenko
4accb6bba8 bc: offset dc_LEX_to_INST[] start
function                                             old     new   delta
zdc_parse_expr                                       516     523      +7
dc_LEX_to_INST                                        56      48      -8
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/1 up/down: 7/-8)               Total: -1 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-24 15:29:33 +01:00
Denys Vlasenko
23ea0734e1 bc: rename BC_LEX_NLINE/WHITESPACE/STR/NAME/NUMBER to XC_LEX_
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-24 15:05:49 +01:00
Denys Vlasenko
9d9c97efbd bc: separate many bc and dc LEX constants
function                                             old     new   delta
zdc_parse_expr                                       510     516      +6
bc_parse_expr_empty_ok                              1963    1966      +3
dc_LEX_to_INST                                        83      56     -27
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/1 up/down: 9/-27)             Total: -18 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-24 15:00:56 +01:00
Denys Vlasenko
69560f42da bc: rename several BC_LEX_OPs to XC_LEX_OPs.
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-24 14:14:23 +01:00
Denys Vlasenko
abf6cf6765 bc: move BC_LEX_OP_INC/DEC to the end of operation LEX constants
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-24 13:20:57 +01:00
Denys Vlasenko
7d9be0bc6d bc: rename BC_LEXs to XC_LEXs for common constants, and to DC_LEXs for dc-specific
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-24 12:25:20 +01:00
Denys Vlasenko
2097ac8d9e bc: move functions/macros around, no code changes
Order now is:
enums/structures/defines,
utility/common functions,
parsing,
execution,
main loop,
main()

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-24 05:00:36 +01:00
Denys Vlasenko
a7732d1120 bc: rename common INST constants to XC_, dc-specific ones to DC_
This will assist in disentangling dc and bc LEX constants

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-24 04:26:07 +01:00
Denys Vlasenko
81293c8af0 dc: without -x, do not parse extended regs: 's p' means: store to ' ' reg, print
function                                             old     new   delta
zbc_lex_next                                        2240    2233      -7
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-7)               Total: -7 bytes
   text	   data	    bss	    dec	    hex	filename
 981437	    485	   7296	 989218	  f1822	busybox_old
 981412	    485	   7296	 989193	  f1809	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-24 02:01:32 +01:00
Denys Vlasenko
73b2c60825 bc: fix incorrect bit in BC_PARSE_EXPRS_BITS: 'limits' is not allowed
Alsl, move and rename dc_lex_tokens[] to dc_char_to_LEX[]

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-24 01:04:21 +01:00
Denys Vlasenko
ad0bd381e9 bc: for "dc only" remove handling of LAST, move OBASE enums up to IBASE
function                                             old     new   delta
dc_LEX_to_INST                                         -      82     +82
bc_parse_pushNUM                                       -      62     +62
zbc_program_num                                      981     978      -3
bc_result_free                                        46      43      -3
zbc_program_binOpPrep                                305     300      -5
static.msg                                            24      12     -12
zbc_program_exec                                    4013    3994     -19
zdc_parse_expr                                       583     507     -76
dc_parse_insts                                        83       -     -83
------------------------------------------------------------------------------
(add/remove: 2/1 grow/shrink: 0/6 up/down: 144/-201)          Total: -57 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-24 00:50:32 +01:00
Denys Vlasenko
9471bd4660 bc: fix empty lines in dc generating "bad token" message
function                                             old     new   delta
zdc_program_asciify                                    -     370    +370
zbc_program_pushArray                                  -     147    +147
zbc_vm_process                                       824     828      +4
zbc_program_exec                                    4182    4046    -136
zdc_program_printStream                              146       -    -146
zbc_program_read                                     268       -    -268
------------------------------------------------------------------------------
(add/remove: 2/2 grow/shrink: 1/1 up/down: 521/-550)          Total: -29 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-23 00:13:15 +01:00
Denys Vlasenko
01eb5e9da1 bc: shrink modular exponentiation code
function                                             old     new   delta
zdc_program_modexp                                   721     694     -27

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-22 23:59:21 +01:00
Denys Vlasenko
1acac7f9c5 bc: do not yet allow 2^2.1
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-22 23:14:48 +01:00
Denys Vlasenko
a9f59db809 bc: avoid having to twiddle b->neg in zbc_num_p()
function                                             old     new   delta
zbc_num_ulong_abs                                      -      70     +70
zbc_num_p                                            424     413     -11
zbc_num_ulong                                         81      21     -60
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 0/2 up/down: 70/-71)             Total: -1 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-22 21:52:30 +01:00
Denys Vlasenko
2ea8ddf8c2 bc: do not disallow powers to N.0000 degree - it's even shorter code
function                                             old     new   delta
zbc_num_p                                            440     424     -16

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-22 21:45:18 +01:00
Denys Vlasenko
1557b76edd bc: shrink zbc_num_ulong()
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-22 21:37:46 +01:00
Denys Vlasenko
ec74a9c145 bc: make long-running dc drop data it does not need (when it can)
function                                             old     new   delta
zbc_vm_process                                       765     824     +59

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-22 19:23:46 +01:00
Denys Vlasenko
5cf0b2d466 bc: unbreak "z function" macro machinery
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-22 18:24:19 +01:00
Denys Vlasenko
badf683b0a dc: unbreak interactive mode - was trying to get next tokens instead of executing
function                                             old     new   delta
zbc_program_read                                       -     268    +268
zdc_program_printStream                                -     146    +146
zbc_program_exec                                    4046    4182    +136
zdc_program_execStr                                  472     512     +40
zdc_parse_exprs_until_eof                              -      26     +26
zbc_vm_process                                       740     765     +25
zbc_lex_next                                        2225    2240     +15
zdc_parse_expr                                       569     535     -34
zbc_program_pushArray                                147       -    -147
zdc_program_asciify                                  370       -    -370
------------------------------------------------------------------------------
(add/remove: 3/2 grow/shrink: 4/1 up/down: 656/-551)          Total: 105 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-22 18:10:50 +01:00
Denys Vlasenko
5daa1a0adf bc: move zbc_lex_next() out of zdc_parse_string() and zdc_parse_mem()
function                                             old     new   delta
zdc_parse_mem                                         99      93      -6
zdc_parse_expr                                       586     569     -17
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-23)             Total: -23 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-22 16:41:23 +01:00
Denys Vlasenko
7c1c9dc86b bc: shorten sanity-check code
function                                             old     new   delta
zbc_vm_process                                       745     740      -5

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-22 14:18:47 +01:00
Denys Vlasenko
88fcd5cc6c bc: fold single-callsite functions into callers, commonalize code
function                                             old     new   delta
zbc_vm_process                                       699     745     +46
zbc_parse_stmt_possibly_auto                        1689    1682      -7
bc_parse_reset                                       113       -    -113
------------------------------------------------------------------------------
(add/remove: 0/1 grow/shrink: 1/1 up/down: 46/-120)           Total: -74 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-22 06:00:25 +01:00
Denys Vlasenko
514967df5e bc: zcommon_parse_expr() has only one user, fold it in
function                                             old     new   delta
zbc_program_exec                                    4021    4046     +25
zdc_parse_expr                                       589     586      -3
zcommon_parse_expr                                    28       -     -28
------------------------------------------------------------------------------
(add/remove: 0/1 grow/shrink: 1/1 up/down: 25/-31)             Total: -6 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-22 03:38:52 +01:00
Denys Vlasenko
f093e3df2d bc: zcommon_parse_expr() lost its flags argument
function                                             old     new   delta
zcommon_parse_expr                                     -      28     +28
zdc_program_execStr                                  474     472      -2
zbc_program_exec                                    4023    4021      -2
common_parse_expr                                     29       -     -29
------------------------------------------------------------------------------
(add/remove: 1/1 grow/shrink: 0/2 up/down: 28/-33)             Total: -5 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-22 02:30:18 +01:00
Denys Vlasenko
39287e0d02 bc: stop using BC_PARSE_NOCALL in dc code
function                                             old     new   delta
zdc_program_execStr                                  465     474      +9
zbc_vm_process                                       701     699      -2
common_parse_expr                                     32      29      -3
zdc_parse_expr                                       615     586     -29
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/3 up/down: 9/-34)             Total: -25 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-22 02:23:08 +01:00
Denys Vlasenko
8c1e723596 bc: unbreak read(), remove checks for nested read()
function                                             old     new   delta
zbc_parse_pushSTR                                      -      65     +65
common_parse_expr                                      -      32     +32
bc_error_nested_read_call                             10       -     -10
bc_parse_expr_empty_ok                              1977    1963     -14
zdc_parse_expr                                       635     615     -20
zcommon_parse_expr                                    32       -     -32
zbc_program_exec                                    4064    4023     -41
bc_parse_pushSTR                                      65       -     -65
------------------------------------------------------------------------------
(add/remove: 2/3 grow/shrink: 0/3 up/down: 97/-182)           Total: -85 bytes
   text	   data	    bss	    dec	    hex	filename
 981661	    485	   7296	 989442	  f1902	busybox_old
 981540	    485	   7296	 989321	  f1889	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-22 01:34:10 +01:00
Denys Vlasenko
1dc4de9d9b bc: code shrink
function                                             old     new   delta
bc_result_pop_and_push                                 -      73     +73
zbc_program_exec                                    4068    4064      -4
bc_program_binOpRetire                                46      32     -14
zdc_program_assignStr                                146     126     -20
zdc_program_asciify                                  395     370     -25
bc_program_retire                                     35       7     -28
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 0/5 up/down: 73/-91)            Total: -18 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-21 23:13:48 +01:00
Denys Vlasenko
24e4194635 bc: rename BcInstPtr::idx and ::len
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-21 23:01:26 +01:00
Denys Vlasenko
8287b1c869 bc: remove unnecessary initializations
function                                             old     new   delta
zdc_program_asciify                                  403     395      -8
zbc_program_print                                    691     683      -8
zbc_program_exec                                    4079    4068     -11
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/3 up/down: 0/-27)             Total: -27 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-21 22:43:53 +01:00
Denys Vlasenko
e8e7bda63a bc: use non-allocated BcNum's where appropriate
function                                             old     new   delta
zbc_num_printNum                                     540     543      +3
zdc_program_asciify                                  407     403      -4
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/1 up/down: 3/-4)               Total: -1 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-21 22:36:04 +01:00
Denys Vlasenko
6ed7fb0a87 bc: optimize bc_vec_push() usage
function                                             old     new   delta
bc_parse_pushNUM                                      87      80      -7
zbc_parse_stmt_possibly_auto                        1697    1689      -8
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-15)             Total: -15 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-21 22:16:17 +01:00
Denys Vlasenko
19eee8ed7c bc: fix for() to not leave data on stack
function                                             old     new   delta
zbc_parse_stmt_possibly_auto                        1665    1697     +32
zbc_vm_process                                       672     701     +29
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/0 up/down: 61/0)               Total: 61 bytes
   text	   data	    bss	    dec	    hex	filename
 981656	    485	   7296	 989437	  f18fd	busybox_old
 981748	    485	   7296	 989529	  f1959	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-21 20:29:34 +01:00
Denys Vlasenko
5d57bc442d bc: fix infinite state growth for "yes 1 | bc" case
function                                             old     new   delta
zbc_vm_process                                       585     672     +87
bc_func_init                                          50      86     +36
zbc_program_num                                      990    1022     +32
bc_program_str                                        17      47     +30
bc_program_current_func                                -      22     +22
bc_parse_pushNUM                                      66      87     +21
bc_func_free                                          27      43     +16
zbc_num_binary                                       145     147      +2
bc_program_reset                                      64      61      -3
bc_parse_pushSTR                                      73      65      -8
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 7/2 up/down: 246/-11)           Total: 235 bytes
   text	   data	    bss	    dec	    hex	filename
 981393	    485	   7296	 989174	  f17f6	busybox_old
 981656	    485	   7296	 989437	  f18fd	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-21 16:22:26 +01:00
Denys Vlasenko
447dc02c27 bc: fix comment
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-21 00:39:02 +01:00
Denys Vlasenko
52caa007e3 bc: for(;;) fix from upstream
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-21 00:35:22 +01:00
Denys Vlasenko
047154472a bc: shrink bc_program_add_fn()
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-21 00:10:26 +01:00
Denys Vlasenko
44a99ca617 bc: "dc only" config does not need G.prog.fn_map
function                                             old     new   delta
bc_program_add_fn                                      -      43     +43
bc_vm_init                                           655     675     +20
bc_program_addFunc                                   138     118     -20
zdc_parse_expr                                       658     635     -23
zdc_program_asciify                                  447     407     -40
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 1/3 up/down: 63/-83)            Total: -20 bytes
   text	   data	    bss	    dec	    hex	filename
 984739	    489	   7312	 992540	  f251c	busybox_old
 984712	    489	   7312	 992513	  f2501	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-20 20:34:09 +01:00
Denys Vlasenko
5acd14ba5b bc: fix keyword matching to not think "ifz" is the "if" keyword
function                                             old     new   delta
zbc_lex_next                                        2224    2225      +1

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

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-20 16:24:18 +01:00
Denys Vlasenko
eaa3b00002 bc: shorten bc_program_addFunc()
function                                             old     new   delta
bc_func_init                                           -      50     +50
bc_program_addFunc                                   201     138     -63
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 0/1 up/down: 50/-63)            Total: -13 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-19 20:05:50 +01:00
Denys Vlasenko
408b7d45f6 bc: fix "dc only" and "bc only" configs
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-19 19:43:03 +01:00
Denys Vlasenko
fa21079183 bc: rename dc-specific functions, simplify zdc_program_execStr() a bit
function                                             old     new   delta
zbc_program_execStr                                  496       -    -496
zdc_program_execStr                                    -     491    +491

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-19 19:38:51 +01:00
Denys Vlasenko
44dbe675dd bc: rename zbc_parse_string->bc_parse_pushSTR, do not emit next opcode in it
function                                             old     new   delta
bc_parse_pushSTR                                       -      73     +73
zbc_parse_stmt_possibly_auto                        1638    1640      +2
zbc_parse_string                                      89       -     -89
------------------------------------------------------------------------------
(add/remove: 1/1 grow/shrink: 1/0 up/down: 75/-89)            Total: -14 bytes
   text	   data	    bss	    dec	    hex	filename
 981377	    485	   7296	 989158	  f17e6	busybox_old
 981363	    485	   7296	 989144	  f17d8	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-19 19:10:40 +01:00
Denys Vlasenko
ea5cad2a0d bc: avoid bc_vec_item() calls in bc_vm_run()
function                                             old     new   delta
bc_vm_run                                            124     112     -12

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-19 18:09:31 +01:00
Denys Vlasenko
eac0de55d6 bc: avoid bc_vec_item() calls in bc_array_copy()
function                                             old     new   delta
zbc_program_copyToVar                                311     300     -11

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-19 17:59:30 +01:00
Denys Vlasenko
87888ce4d8 bc: avoid successive bc_vec_item(&func->autos, i)
function                                             old     new   delta
zbc_func_insert                                       97     100      +3
zbc_program_call                                     353     354      +1
zbc_program_exec                                    4085    4078      -7
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/1 up/down: 4/-7)               Total: -3 bytes
   text	   data	    bss	    dec	    hex	filename
 981403	    485	   7296	 989184	  f1800	busybox_old
 981400	    485	   7296	 989181	  f17fd	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-19 17:55:23 +01:00
Denys Vlasenko
f36a0adf8b bc: remove unnecessary union use
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-19 17:15:04 +01:00
Denys Vlasenko
dfe1dd2031 bc: "unsigned_n > 0" is shorter code than "unsigned_n >= 1"
function                                             old     new   delta
zbc_program_print                                    680     677      -3
zbc_program_exec                                    4089    4085      -4
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-7)               Total: -7 bytes
   text	   data	    bss	    dec	    hex	filename
 981404	    485	   7296	 989185	  f1801	busybox_old
 981397	    485	   7296	 989178	  f17fa	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-19 17:09:01 +01:00
Denys Vlasenko
65e1046abf bc: open-code bc_parse_updateFunc() macro
This clearly shows one place which would need changing
for nested funcdefs to work.

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

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-19 15:13:14 +01:00
Denys Vlasenko
684d441f5c bc: make bc_program_addFunc() return new idx, untangle &p->fidx interaction
In:
       bc_program_addFunc(name, idx);
       p->func = bc_program_func(p->fidx);
in some cases p->fidx was updated by _first_ statement - because passed idx
was pointing at it. This was very obscure.

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

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-19 14:59:22 +01:00
Denys Vlasenko
085b420220 bc: "reload stack only after insts" change missed a few places
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-19 14:02:59 +01:00
Denys Vlasenko
5aa54830bf bc: rename a few functions
function                                             old     new   delta
bc_map_find_ge                                         -      71     +71
bc_map_find_exact                                      -      50     +50
bc_map_index                                          50       -     -50
bc_map_find                                           71       -     -71
------------------------------------------------------------------------------
(add/remove: 2/2 grow/shrink: 0/0 up/down: 121/-121)            Total: 0 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-19 13:55:53 +01:00
Denys Vlasenko
e3d3d2067d bc: remove redundant strdup+free in zbc_parse_call()
function                                             old     new   delta
zbc_parse_name                                       527     482     -45
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-45)             Total: -45 bytes
   text	   data	    bss	    dec	    hex	filename
 981541	    485	   7296	 989322	  f188a	busybox_old
 981486	    485	   7296	 989267	  f1853	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-19 13:20:02 +01:00
Denys Vlasenko
4796a1d537 bc: delete G.prog.strmb for real
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-19 12:48:16 +01:00
Denys Vlasenko
b80d7aad1b bc: in execution loop, reload stack only after insts which can change it
Only these functions affect G.prog.exestack:
zbc_program_read
zbc_program_call
zbc_program_return
zbc_program_nquit
zbc_program_execStr

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

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-19 12:35:27 +01:00
Denys Vlasenko
d6e24bd795 bc: simplify bc_array_expand()
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18 20:10:48 +01:00
Denys Vlasenko
30a8e0c2f9 bc: code shrink
function                                             old     new   delta
zbc_program_print                                    684     680      -4
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-4)               Total: -4 bytes
   text	   data	    bss	    dec	    hex	filename
 981368	    485	   7296	 989149	  f17dd	busybox_old
 981364	    485	   7296	 989145	  f17d9	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18 19:20:04 +01:00
Denys Vlasenko
694d2982e5 bc: code shrink
function                                             old     new   delta
bc_program_name                                       67      63      -4
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-4)               Total: -4 bytes
   text	   data	    bss	    dec	    hex	filename
 981372	    485	   7296	 989153	  f17e1	busybox_old
 981368	    485	   7296	 989149	  f17dd	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18 19:17:11 +01:00
Denys Vlasenko
7b30bc0222 bc: shrink bc_program_pushVar()
function                                             old     new   delta
bc_program_pushVar                                   203     198      -5

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18 17:14:34 +01:00
Denys Vlasenko
d340143247 bc: get rid of G.prog.ob, G.prog.strmb
function                                             old     new   delta
zbc_num_printNum                                     489     540     +51
zbc_program_asciify                                  426     473     +47
zbc_program_print                                    686     684      -2
zbc_program_exec                                    4008    3995     -13
zbc_program_assign                                   474     440     -34
bc_vm_init                                           739     663     -76
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/4 up/down: 98/-125)           Total: -27 bytes
   text	   data	    bss	    dec	    hex	filename
 981404	    485	   7296	 989185	  f1801	busybox_old
 981377	    485	   7296	 989158	  f17e6	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18 17:00:35 +01:00
Denys Vlasenko
09fe0aaefa bc: do not show -i in --help, it's a NOP (for now)
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18 16:32:25 +01:00
Denys Vlasenko
7f2d59c38d bc: style edit, no code changes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18 16:24:07 +01:00
Denys Vlasenko
3f940c9c70 bc: shrink bc_program_index()
function                                             old     new   delta
bc_program_index                                      66      47     -19
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-19)             Total: -19 bytes
   text	   data	    bss	    dec	    hex	filename
 981418	    485	   7296	 989199	  f180f	busybox_old
 981399	    485	   7296	 989180	  f17fc	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18 15:49:42 +01:00
Denys Vlasenko
55f3cab7e9 bc: fix "echo -n '#foo' | bc" not eating last 'o'
function                                             old     new   delta
zdc_parse_expr                                       656     653      -3
bc_lex_lineComment                                    39      36      -3
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-6)               Total: -6 bytes
   text	   data	    bss	    dec	    hex	filename
 981424	    485	   7296	 989205	  f1815	busybox_old
 981418	    485	   7296	 989199	  f180f	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18 14:39:33 +01:00
Denys Vlasenko
a199cc95b7 bc: shrink zdc_parse_expr()
function                                             old     new   delta
zdc_parse_expr                                       656     653      -3

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18 14:11:35 +01:00
Denys Vlasenko
07597cd35d bc: optimize zbc_lex_string()
function                                             old     new   delta
zbc_lex_next                                        2359    2353      -6

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18 14:03:20 +01:00
Denys Vlasenko
ef271da33f bc: shrink zdc_lex_string()
This actually fixes a rather obscure bug. This was failing to find
end of the string:

	$ echo -n '[foo]' | dc
	dc: string end could not be found

function                                             old     new   delta
zbc_lex_next                                        2230    2141     -89
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-89)             Total: -89 bytes
   text	   data	    bss	    dec	    hex	filename
 981461	    485	   7296	 989242	  f183a	busybox_old
 981372	    485	   7296	 989153	  f17e1	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18 13:48:37 +01:00
Denys Vlasenko
d4258dd321 bc: another for() loop simplified
function                                             old     new   delta
zbc_program_print                                    688     686      -2

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18 13:22:23 +01:00
Denys Vlasenko
5c0c5abba0 bc: simplify another for() loop
function                                             old     new   delta
zbc_num_d                                            563     557      -6

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18 13:15:55 +01:00
Denys Vlasenko
6b0fbd14fc bc: rewrite more for() loops
function                                             old     new   delta
bc_program_name                                       75      67      -8

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18 12:55:40 +01:00
Denys Vlasenko
71c82d1d8c bc: rewrite another for() loop
function                                             old     new   delta
zbc_num_d                                            570     563      -7

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18 12:43:21 +01:00
Denys Vlasenko
e2e6ffd3c5 bc: replace signed division / 10 by unsigned
function                                             old     new   delta
zbc_num_a                                            443     441      -2

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18 12:23:16 +01:00
Denys Vlasenko
4113e1f2cd bc: rewrite bc_num_compare() to be readable
function                                             old     new   delta
bc_num_compare                                        59      51      -8

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18 03:30:23 +01:00
Denys Vlasenko
57734c926b bc: fold zbc_num_stream() into its single caller
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18 03:30:23 +01:00
Denys Vlasenko
f6e3f8511e bc: get rid of BcNum BcProgram::ib,hexb
function                                             old     new   delta
zbc_program_num                                      907     943     +36
zbc_program_assign                                   485     474     -11
bc_vm_init                                           757     739     -18
bc_num_ten                                            30       -     -30
------------------------------------------------------------------------------
(add/remove: 0/1 grow/shrink: 1/2 up/down: 36/-59)            Total: -23 bytes
   text	   data	    bss	    dec	    hex	filename
 981532	    485	   7296	 989313	  f1881	busybox_old
 981509	    485	   7296	 989290	  f186a	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18 03:30:23 +01:00
Denys Vlasenko
0f31a5c79e bc: fixes to bugs found while testing 64-bit build
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18 03:16:48 +01:00
Denys Vlasenko
f4f10720fe bc: fixed from 64-bit compile
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-18 02:23:53 +01:00
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