Commit Graph

1294 Commits

Author SHA1 Message Date
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