Commit Graph

16097 Commits

Author SHA1 Message Date
Denys Vlasenko
1ff1c70944 bc: make bc_vm_envArgs() NULL-terminate its argv, simplify bc_vm_envLen()
function                                             old     new   delta
bc_num_ulong                                          92     103     +11
static.nullptr                                         -       4      +4
bc_args                                              120     123      +3
static.bc_args_env_name                                4       -      -4
dc_main                                               49      41      -8
bc_main                                               49      41      -8
bc_vm_run                                           1917    1883     -34
------------------------------------------------------------------------------
(add/remove: 1/1 grow/shrink: 2/3 up/down: 18/-54)            Total: -36 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-06 00:54:12 +01:00
Denys Vlasenko
e873ff9660 bc: if FEATURE_CLEAN_UP, clean up allocations on exits
Will have exitcode 1 even on "quit" and "halt", is it a problem?

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-06 00:29:22 +01:00
Denys Vlasenko
050b0fe9a7 bc: do not allow "()" as a valid expression
function                                             old     new   delta
bc_parse_expr_empty_ok                                 -    2178   +2178
bc_parse_expr                                       2178      49   -2129
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 0/1 up/down: 2178/-2129)         Total: 49 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 22:40:44 +01:00
Denys Vlasenko
cca79a0064 bc: reorder functions, delete forward declarations, no code changes - part 2
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 21:15:46 +01:00
Denys Vlasenko
b0e3761410 bc: reorder functions, delete forward declarations, no code changes
Pure block moves of text

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 21:03:16 +01:00
Denys Vlasenko
aad652a69a bc: remove unused strings
text	   data	    bss	    dec	    hex	filename
 987088	    485	   7296	 994869	  f2e35	busybox_old
 987079	    485	   7296	 994860	  f2e2c	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 20:33:23 +01:00
Denys Vlasenko
452df923f7 bc: trivial simplification in bc_parse_return()
function                                             old     new   delta
bc_parse_stmt                                       2276    2271      -5

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 20:28:26 +01:00
Denys Vlasenko
657d6bb262 bc: fix "warning: 's' may be used uninitialized in this function"
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 20:25:03 +01:00
Denys Vlasenko
bcb62a7f11 bc: code shrink
function                                             old     new   delta
bc_parse_expr                                       2151    2178     +27
bc_parse_exprs                                        60       -     -60
------------------------------------------------------------------------------
(add/remove: 0/1 grow/shrink: 2/0 up/down: 27/-60)            Total: -33 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 20:17:48 +01:00
Denys Vlasenko
6543758b13 bc: code shrink
function                                             old     new   delta
bc_parse_operator                                    181     184      +3
bc_parse_ops                                          50      25     -25
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/1 up/down: 3/-25)             Total: -22 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 19:37:19 +01:00
Denys Vlasenko
f381a88234 bc: make division operation interruptible
function                                             old     new   delta
bc_num_d                                             564     584     +20
bc_num_r                                             230     245     +15
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/0 up/down: 35/0)               Total: 35 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 19:21:34 +01:00
Denys Vlasenko
b3cb90124b bc: use unsigned division by 10 instead of signed
function                                             old     new   delta
bc_num_k                                             990     988      -2

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 19:05:32 +01:00
Denys Vlasenko
06fa65bd95 bc: move ^C check fro power calculation to multiplication
function                                             old     new   delta
bc_num_k                                             971     990     +19
bc_num_p                                             507     478     -29
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/1 up/down: 19/-29)            Total: -10 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 19:00:58 +01:00
Denys Vlasenko
b692c2faf1 bc: bc_num_k(): move carry,i,j,len to inner scope
This might help compiler

function                                             old     new   delta
bc_num_k                                             957     971     +14

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 18:56:14 +01:00
Denys Vlasenko
0d7e46b1de bc: tweak error messages
function                                             old     new   delta
bc_lex_token                                        1285    1299     +14

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 18:31:19 +01:00
Denys Vlasenko
0064679915 bc: fix inverted POSIXness test, improve messages, commonalize message strings
function                                             old     new   delta
bc_lex_token                                        1251    1285     +34
bc_POSIX_does_not_allow_bool_ops_this_is_bad           -      25     +25
bc_POSIX_does_not_allow_empty_X_expression_in_for      -      20     +20
bc_POSIX_does_not_allow                                -      20     +20
bc_parse_expr                                       2146    2151      +5
bc_num_ulong                                         103      92     -11
------------------------------------------------------------------------------
(add/remove: 3/0 grow/shrink: 2/1 up/down: 104/-11)            Total: 93 bytes
   text	   data	    bss	    dec	    hex	filename
 987210	    485	   7296	 994991	  f2eaf	busybox_old
 987084	    485	   7296	 994865	  f2e31	busybox_unstripped
^^^^^^^

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 18:12:27 +01:00
Denys Vlasenko
5318f81fbe bc: print error line numbers
FILE:
	print 1
	print "

$ busybox bc -q FILE
bc: FILE:2: string end could not be found
ready for more input
>>> _

function                                             old     new   delta
bc_verror_msg                                          -      99     +99
bc_lex_file                                           12      28     +16
bc_lex_next                                           77      92     +15
dc_lex_token                                         687     701     +14
bc_lex_token                                        1237    1251     +14
bc_posix_error_fmt                                    90      58     -32
bc_error_fmt                                          70      36     -34
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 4/2 up/down: 158/-66)            Total: 92 bytes
   text	   data	    bss	    dec	    hex	filename
 987108	    485	   7296	 994889	  f2e49	busybox_old
 987210	    485	   7296	 994991	  f2eaf	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 17:48:01 +01:00
Denys Vlasenko
08c033c406 bc: optimize pushing zero bytes to vectors
function                                             old     new   delta
bc_vec_pushZeroByte                                    -      10     +10
bc_vm_run                                           1919    1917      -2
bc_vec_string                                         61      59      -2
bc_vec_concat                                         68      66      -2
bc_parse_create                                      170     168      -2
bc_lex_number                                        298     296      -2
dc_lex_token                                         691     687      -4
bc_read_line                                         314     303     -11
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 0/7 up/down: 10/-25)            Total: -15 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 16:55:08 +01:00
Denys Vlasenko
0409ad36a1 bc: restore printing of script name on errors
Examples:

On stdin, no file name is available:
	$ echo 'print "' | busybox bc
	bc: string end could not be found

When the same error is in file:
	$ busybox bc FILE
	bc 1.30.0.git
	Copyright (c) 2018 Gavin D. Howard and contributors
	Report bugs at: https://github.com/gavinhoward/bc
	This is free software with ABSOLUTELY NO WARRANTY
	FILE: string end could not be found
	ready for more input
	>>>

Line number printing to be added later...

function                                             old     new   delta
bc_error_fmt                                          38      70     +32
bc_posix_error_fmt                                    60      90     +30
bc_vm_run                                           1900    1919     +19
bc_program_read                                      338     355     +17
bc_lex_file                                           15      12      -3
bc_program_stdin_name                                  8       -      -8
------------------------------------------------------------------------------
(add/remove: 0/1 grow/shrink: 4/1 up/down: 98/-11)             Total: 87 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 16:39:22 +01:00
Denys Vlasenko
0ad36c46c7 bc: do not check for errors when parsing/running internal library
function                                             old     new   delta
bc_lib_name                                            4       -      -4
bc_vm_run                                           1921    1900     -21
------------------------------------------------------------------------------
(add/remove: 0/1 grow/shrink: 0/1 up/down: 0/-25)             Total: -25 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 16:21:43 +01:00
Denys Vlasenko
24fb2cd62f bc: shrink error handling code by enabling tail-call optimization
function                                             old     new   delta
bc_posix_error_fmt                                     -      60     +60
bc_error_fmt                                           -      38     +38
bc_error_bad_character                                 -      17     +17
bc_parse_auto                                        302     313     +11
bc_num_ulong                                          93     103     +10
bc_error_variable_is_wrong_type                        -      10     +10
bc_error_stack_has_too_few_elements                    -      10     +10
bc_error_nested_read_call                              -      10     +10
bc_error_bad_token                                     -      10     +10
bc_error_bad_expression                                -      10     +10
bc_num_d                                             561     564      +3
bc_program_assign                                    484     486      +2
dc_parse_parse                                        60      59      -1
bc_program_num                                      1130    1129      -1
bc_program_call                                      367     366      -1
bc_parse_stmt                                       2277    2276      -1
bc_lex_number                                        299     298      -1
bc_lex_name                                           91      90      -1
bc_func_insert                                        98      97      -1
bc_num_shift                                          74      72      -2
bc_vm_run                                           1924    1921      -3
bc_parse_endBody                                     424     420      -4
bc_lex_next                                           81      77      -4
bc_program_read                                      343     338      -5
bc_program_asciify                                   469     464      -5
bc_program_pushVar                                   221     215      -6
bc_program_print                                     784     778      -6
bc_program_prep                                       99      93      -6
bc_program_assignStr                                 167     161      -6
bc_parse_else                                        143     137      -6
bc_parse_body                                        124     118      -6
dc_parse_register                                     61      53      -8
dc_lex_token                                         699     691      -8
bc_program_modexp                                    756     746     -10
bc_parse_name                                        593     581     -12
dc_parse_expr                                        775     762     -13
bc_program_copyToVar                                 336     323     -13
bc_program_binOpPrep                                 324     311     -13
bc_program_execStr                                   561     543     -18
bc_program_exec                                     4150    4132     -18
bc_parse_parse                                       483     464     -19
bc_error                                              38      14     -24
bc_lex_token                                        1266    1237     -29
bc_posix_error                                        60      14     -46
bc_parse_expr                                       2194    2146     -48
------------------------------------------------------------------------------
(add/remove: 8/0 grow/shrink: 4/33 up/down: 191/-345)        Total: -154 bytes
   text	   data	    bss	    dec	    hex	filename
 987226	    485	   7296	 995007	  f2ebf	busybox_old
 987072	    485	   7296	 994853	  f2e25	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 16:03:46 +01:00
Denys Vlasenko
f359e004b0 bc: make 2^1000000 interruptible faster
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
68cc0a676e bc: remove tabs from internal library
function                                             old     new   delta
bc_lib                                              1877    1674    -203

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
51fb8aa5c1 bc: store library in ASCII, shrink keyword parsing code
Also, use ARRAY_SIZE() where appropriate

function                                             old     new   delta
bc_lib                                              1878    1877      -1
bc_program_index                                      66      64      -2
bc_lex_token                                        1282    1266     -16
bc_lex_kws                                           220     160     -60
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/4 up/down: 0/-79)             Total: -79 bytes
   text	   data	    bss	    dec	    hex	filename
 987518	    485	   7296	 995299	  f2fe3	busybox_old
 987440	    485	   7296	 995221	  f2f95	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
cb9a99f3bb bc: drop bc_map_init() macro
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
7d62801db9 bc: create a few common functions
function                                             old     new   delta
bc_char_vec_init                                       -      12     +12
bc_vec_pop_all                                         -       8      +8
bc_program_index                                      64      66      +2
bc_vec_string                                         64      61      -3
bc_vec_free                                           27      24      -3
bc_read_line                                         317     314      -3
bc_program_execStr                                   564     561      -3
bc_program_exec                                     4153    4150      -3
bc_program_copyToVar                                 340     336      -4
bc_parse_create                                      175     170      -5
dc_lex_token                                         705     699      -6
bc_program_reset                                      78      72      -6
bc_lex_number                                        305     299      -6
bc_program_read                                      353     343     -10
bc_program_addFunc                                   225     209     -16
bc_vm_run                                           1942    1924     -18
bc_parse_reset                                       181     163     -18
------------------------------------------------------------------------------
(add/remove: 2/0 grow/shrink: 1/14 up/down: 22/-104)          Total: -82 bytes
   text	   data	    bss	    dec	    hex	filename
 987600	    485	   7296	 995381	  f3035	busybox_old
 987518	    485	   7296	 995299	  f2fe3	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
d5f7703abb bc: rewrite "BOOL * EXPR" idiom as if() statement
function                                             old     new   delta
bc_program_index                                      66      64      -2
bc_program_num                                      1147    1130     -17
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-19)             Total: -19 bytes
   text	   data	    bss	    dec	    hex	filename
 987619	    485	   7296	 995400	  f3048	busybox_old
 987600	    485	   7296	 995381	  f3035	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
17c5472c5a bc: switch to SA_RESTART signal handling
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
d70d4a0235 bc: get rid of G.tty and G.flags
G.flags == option_mask32

function                                             old     new   delta
bc_args                                               97     120     +23
dc_main                                               48      49      +1
bc_main                                               48      49      +1
bc_error                                              42      38      -4
bc_posix_error                                        65      60      -5
bc_read_line                                         325     317      -8
dc_lex_token                                         714     705      -9
bc_vm_run                                           2039    1942     -97
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 3/5 up/down: 25/-123)           Total: -98 bytes
   text	   data	    bss	    dec	    hex	filename
 987717	    485	   7296	 995498	  f30aa	busybox_old
 987619	    485	   7296	 995400	  f3048	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
9b70f197b4 bc: convert all status codes, remove bc_err_msgs[], bc_vm_error(), bc_vm_posixError()
function                                             old     new   delta
bc_posix_error                                         -      65     +65
bc_vm_run                                           1995    2039     +44
bc_err_line                                            7       -      -7
bc_num_ulong                                         103      93     -10
bc_parse_parse                                       495     483     -12
bc_err_fmt                                            12       -     -12
bc_warn_fmt                                           14       -     -14
bc_parse_expr                                       2210    2194     -16
bc_program_reset                                     105      78     -27
bc_vm_process                                        130      94     -36
bc_parse_stmt                                       2313    2277     -36
bc_err_msgs                                           60       -     -60
bc_lex_token                                        1367    1282     -85
bc_vm_error                                          143       -    -143
bc_vm_posixError                                     189       -    -189
------------------------------------------------------------------------------
(add/remove: 1/6 grow/shrink: 1/7 up/down: 109/-647)         Total: -538 bytes
   text	   data	    bss	    dec	    hex	filename
 988258	    485	   7296	 996039	  f32c7	busybox_old
 987717	    485	   7296	 995498	  f30aa	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
60cf747b6c bc: convert all non-POSIX BC_STATUS_foo codes
function                                             old     new   delta
bc_program_asciify                                     -     469    +469
bc_parse_parse                                       432     495     +63
dc_parse_expr                                        727     775     +48
bc_vm_run                                           1955    1995     +40
bc_program_num                                      1115    1147     +32
bc_program_binOpPrep                                 296     324     +28
static.msg                                             -      24     +24
bc_parse_name                                        570     593     +23
bc_lex_token                                        1344    1367     +23
dc_lex_token                                         695     714     +19
bc_num_ulong                                          85     103     +18
bc_program_read                                      336     353     +17
dc_parse_parse                                        47      60     +13
bc_parse_stmt                                       2301    2313     +12
bc_parse_auto                                        291     302     +11
bc_program_prep                                       89      99     +10
bc_lex_next                                           71      81     +10
dc_parse_register                                     52      61      +9
bc_program_print                                     775     784      +9
bc_func_insert                                        89      98      +9
bc_program_assignStr                                 159     167      +8
bc_program_assign                                    476     484      +8
bc_parse_body                                        116     124      +8
bc_lex_name                                           83      91      +8
bc_program_pushVar                                   215     221      +6
bc_parse_text                                        141     147      +6
bc_num_shift                                          68      74      +6
bc_num_p                                             472     478      +6
bc_program_execStr                                   559     564      +5
bc_parse_else                                        139     143      +4
bc_lex_number                                        301     305      +4
bc_num_d                                             558     561      +3
bc_parse_endBody                                     422     424      +2
bc_num_r                                             231     230      -1
bc_program_copyToVar                                 343     340      -3
bc_program_call                                      372     367      -5
bc_parse_expr                                       2215    2210      -5
bc_program_modexp                                    763     756      -7
bc_err_msgs                                          164      60    -104
bc_program_pushArray                                 136       -    -136
bc_program_exec                                     4453    4153    -300
------------------------------------------------------------------------------
(add/remove: 2/1 grow/shrink: 31/7 up/down: 961/-561)         Total: 400 bytes
   text	   data	    bss	    dec	    hex	filename
 987766	    485	   7296	 995547	  f30db	busybox_old
 988258	    485	   7296	 996039	  f32c7	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
d38af48e0a bc: convert BC_STATUS_EXEC_SIGNAL - its message string was never used
function                                             old     new   delta
bc_vm_process                                        132     130      -2
bc_err_msgs                                          168     164      -4
dc_parse_parse                                        52      47      -5
bc_parse_reset                                       187     181      -6
bc_program_ready_msg                                  22       -     -22
bc_program_exec                                     4478    4453     -25
bc_parse_parse                                       461     432     -29
bc_program_reset                                     159     105     -54
------------------------------------------------------------------------------
(add/remove: 0/1 grow/shrink: 0/7 up/down: 0/-147)           Total: -147 bytes
   text	   data	    bss	    dec	    hex	filename
 987923	    485	   7296	 995704	  f3178	busybox_old
 987766	    485	   7296	 995547	  f30db	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
abbc433d29 bc: convert BC_STATUS_PARSE_NO_AUTO
function                                             old     new   delta
bc_parse_auto                                        275     291     +16
bc_err_msgs                                          172     168      -4
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/1 up/down: 16/-4)              Total: 12 bytes
   text	   data	    bss	    dec	    hex	filename
 987911	    485	   7296	 995692	  f316c	busybox_old
 987923	    485	   7296	 995704	  f3178	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
04a1c763a6 bc: convert BC_STATUS_EXEC_MISMATCHED_PARAMS and BC_STATUS_EXEC_UNDEFINED_FUNC
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
a02f84472a bc: BC_STATUS_VEC_ITEM_EXISTS is not a real error code, its message was never used
It was only used to indicate rusult of bc_map_insert() - did we insert, or
did we find that this key is already in the map?

function                                             old     new   delta
bc_map_insert                                        142     145      +3
bc_program_addFunc                                   226     225      -1
bc_err_msgs                                          184     180      -4
bc_program_search                                    152     143      -9
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/3 up/down: 3/-14)             Total: -11 bytes
   text	   data	    bss	    dec	    hex	filename
 987904	    485	   7296	 995685	  f3165	busybox_old
 987873	    485	   7296	 995654	  f3146	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
bc5ce66617 bc: simplify bc_lex_comment()
function                                             old     new   delta
bc_lex_token                                        1369    1344     -25

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
c1c2470f84 bc: handle BIN_FILE and LEX_BAD_CHAR errors at the site of detection
The most informative message can be generated at the location
where error is detected. The "error codes" are stupid:
print error meesage immediately, then just return "there was an error"
indicator.

All error codes will be converted. For now, converting these two.

For now, this and following changes will degrade error messages
quality. For example, file name and line number printouts may be lost.
This will be re-added later.

This change anlso fixes handling of invalid stdin input:
this used to cause interactive bc to exit:

....
>>> ς
bc: illegal character 0xcf
bc: illegal character 0x82
>>> _

function                                             old     new   delta
bc_error                                               -      42     +42
bc_lex_token                                        1333    1369     +36
dc_lex_token                                         675     695     +20
bc_read_line                                         311     325     +14
bc_num_a                                             456     454      -2
bc_err_msgs                                          188     184      -4
bc_num_ulong                                          95      85     -10
bc_vm_run                                           1984    1955     -29
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 3/4 up/down: 112/-45)            Total: 67 bytes
   text	   data	    bss	    dec	    hex	filename
 987828	    485	   7296	 995609	  f3119	busybox_old
 987929	    485	   7296	 995710	  f317e	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
d4744adf35 bc: eliminate BC_STATUS_INPUT_EOF
function                                             old     new   delta
fflush_and_check                                       -      36     +36
bc_num_a                                             445     456     +11
bc_num_ulong                                          85      95     +10
bc_vm_run                                           1978    1984      +6
bc_num_s                                             246     252      +6
bc_err_msgs                                          192     188      -4
quit                                                  38      32      -6
bc_vm_process                                        139     132      -7
bc_program_reset                                     172     159     -13
bc_parse_create                                      192     175     -17
bc_read_line                                         349     311     -38
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 4/6 up/down: 69/-85)            Total: -16 bytes
   text	   data	    bss	    dec	    hex	filename
 987844	    485	   7296	 995625	  f3129	busybox_old
 987828	    485	   7296	 995609	  f3119	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
cfdc1334c3 bc: handle "limits" and "quit" immediately at parse time
No need to propagate a special exit code.

function                                             old     new   delta
bc_parse_stmt                                       2197    2301    +104
quit                                                   -      38     +38
bc_read_line                                         344     349      +5
bc_program_reset                                     174     172      -2
bc_num_s                                             252     246      -6
bc_num_a                                             454     445      -9
bc_parse_parse                                       471     461     -10
bc_num_ulong                                          95      85     -10
bc_program_exec                                     4500    4478     -22
bc_vm_run                                           2006    1978     -28
bc_vm_process                                        291     139    -152
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 2/8 up/down: 147/-239)          Total: -92 bytes
   text	   data	    bss	    dec	    hex	filename
 987936	    485	   7296	 995717	  f3185	busybox_old
 987844	    485	   7296	 995625	  f3129	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
01cabafd05 bc": drop unused error codes and strings
function                                             old     new   delta
bc_err_msgs                                          216     192     -24
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-24)             Total: -24 bytes
   text	   data	    bss	    dec	    hex	filename
 988122	    485	   7296	 995903	  f323f	busybox_old
 987936	    485	   7296	 995717	  f3185	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
b8860a8892 bc: remove "error ids": serve no useful purpose, error message should be explanatory enough
function                                             old     new   delta
bc_warn_fmt                                           17      14      -3
bc_err_fmt                                            15      12      -3
bc_vm_posixError                                     205     189     -16
bc_vm_error                                          156     138     -18
bc_errs                                               28       -     -28
bc_err_ids                                            58       -     -58
------------------------------------------------------------------------------
(add/remove: 0/2 grow/shrink: 0/4 up/down: 0/-126)           Total: -126 bytes
   text	   data	    bss	    dec	    hex	filename
 988288	    485	   7296	 996069	  f32e5	busybox_old
 988122	    485	   7296	 995903	  f323f	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
1f67e935ac bc: reduce forward declarations
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
d9d66556d7 bc: use smaller datatypes for limits, match GNU bc 'limits' output
function                                             old     new   delta
bc_vm_process                                        315     291     -24
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-24)             Total: -24 bytes
   text	   data	    bss	    dec	    hex	filename
 988303	    485	   7296	 996084	  f32f4	busybox_old
 988273	    485	   7296	 996054	  f32d6	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
416ce76bcd bc: better handle optional args of bc_program_pushVar()
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
9721f6c8b0 bc: tweak help text
-v is supported but not shown

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
a0c421c118 bc: simplify bc_vm_stdin()
function                                             old     new   delta
bc_vm_run                                           2020    2006     -14

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
71e1fc6b37 bc: only check for ^C in bc_program_exec() main loop
Checking it in individual operations such as SQRT is not necessary
since they usually do not take very long to complete. We repeatedly return
to main loop.

TODO: re-add more fine-grained ^C checks - but only with examples where it is
actually needed. E.g. I suspect simplest ops like addition or compare won't need it.

function                                             old     new   delta
bc_program_index                                      66      64      -2
bc_num_s                                             258     246     -12
bc_num_cmp                                           294     275     -19
bc_num_compare                                        84      59     -25
bc_num_subArrays                                      74      47     -27
bc_num_a                                             474     445     -29
bc_program_exec                                     4530    4500     -30
bc_num_p                                             518     472     -46
bc_num_d                                             604     558     -46
bc_num_k                                            1005     957     -48
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/10 up/down: 0/-284)          Total: -284 bytes
   text	   data	    bss	    dec	    hex	filename
 988601	    485	   7296	 996382	  f341e	busybox_old
 988317	    485	   7296	 996098	  f3302	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
df51539ed0 bc: simpler calling convention for bc_read_file(), bc_program_search()
function                                             old     new   delta
bc_vm_run                                           1854    2020    +166
bc_program_assign                                    482     476      -6
bc_program_pushVar                                   225     215     -10
bc_program_call                                      366     356     -10
bc_program_num                                      1126    1115     -11
bc_program_copyToVar                                 354     343     -11
bc_program_search                                    164     152     -12
bc_program_execStr                                   573     559     -14
bc_program_exec                                     4544    4530     -14
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/8 up/down: 166/-88)            Total: 78 bytes
   text	   data	    bss	    dec	    hex	filename
 988523	    485	   7296	 996304	  f33d0	busybox_old
 988601	    485	   7296	 996382	  f341e	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
e3b4f23cf3 bc: bc_num_ulong2num(), bc_program_pushGlobal(), bc_program_stackLen() never fail
function                                             old     new   delta
bc_num_ulong2num                                      66      62      -4
bc_num_printNum                                      572     563      -9
bc_program_exec                                     4562    4544     -18
bc_program_num                                      1147    1126     -21
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/4 up/down: 0/-52)             Total: -52 bytes
   text	   data	    bss	    dec	    hex	filename
 988575	    485	   7296	 996356	  f3404	busybox_old
 988523	    485	   7296	 996304	  f33d0	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00
Denys Vlasenko
a1d3ca2455 bc: stop passing around pointers to G.prog, they are all constant
function                                             old     new   delta
bc_program_exec                                     4523    4562     +39
bc_program_assign                                    450     482     +32
bc_program_assignStr                                 131     159     +28
bc_program_print                                     762     775     +13
bc_program_num                                      1134    1147     +13
bc_program_search                                    154     164     +10
bc_num_ulong                                          85      95     +10
dc_parse_expr                                        719     727      +8
bc_program_retire                                     34      40      +6
bc_program_reset                                     168     174      +6
bc_program_binOpRetire                                50      56      +6
bc_program_addFunc                                   220     226      +6
bc_program_prep                                       88      89      +1
dc_parse_init                                         18      17      -1
bc_program_copyToVar                                 355     354      -1
bc_parse_text                                        142     141      -1
bc_parse_number                                       88      87      -1
bc_parse_init                                         18      17      -1
bc_parse_endBody                                     423     422      -1
common_parse_init                                     29      26      -3
bc_parse_string                                      103     100      -3
bc_parse_addFunc                                      44      41      -3
bc_program_call                                      371     366      -5
bc_program_binOpPrep                                 301     296      -5
bc_program_read                                      342     336      -6
bc_parse_create                                      198     192      -6
bc_program_pushArray                                 143     136      -7
bc_parse_reset                                       194     187      -7
bc_vm_process                                        323     315      -8
bc_program_pushVar                                   236     225     -11
bc_vm_run                                           1872    1854     -18
bc_parse_name                                        590     570     -20
bc_program_execStr                                   594     573     -21
bc_program_modexp                                    793     763     -30
bc_program_printStream                               172       -    -172
------------------------------------------------------------------------------
(add/remove: 0/1 grow/shrink: 13/21 up/down: 178/-331)       Total: -153 bytes
   text	   data	    bss	    dec	    hex	filename
 988728	    485	   7296	 996509	  f349d	busybox_old
 988575	    485	   7296	 996356	  f3404	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2018-12-05 15:43:35 +01:00