[git commit] bc: code shrink - convert two macros to functions

Denys Vlasenko vda.linux at googlemail.com
Thu Dec 6 12:10:56 UTC 2018


commit: https://git.busybox.net/busybox/commit/?id=b23ac51d0cfc04226fa8fcc90edd00808614cb32
branch: https://git.busybox.net/busybox/commit/?id=refs/heads/master

function                                             old     new   delta
bc_program_printStream                                 -     185    +185
bc_program_pushArray                                   -     147    +147
bc_program_exec                                     4132    4219     +87
bc_vec_pop                                             -      27     +27
bc_vec_top                                             -      13     +13
bc_num_ulong                                          92     103     +11
bc_vm_run                                           1905    1903      -2
bc_vm_process                                         94      92      -2
bc_program_reset                                      72      70      -2
bc_program_prep                                       93      91      -2
bc_program_call                                      366     364      -2
bc_parse_startBody                                    47      45      -2
bc_parse_parse                                       464     462      -2
bc_parse_else                                        137     135      -2
bc_parse_body                                        118     116      -2
bc_program_num                                      1129    1125      -4
bc_parse_text                                        147     143      -4
bc_program_retire                                     40      35      -5
bc_program_print                                     778     773      -5
bc_program_modexp                                    746     741      -5
bc_program_pushVar                                   215     208      -7
bc_program_copyToVar                                 323     316      -7
bc_parse_operator                                    184     177      -7
bc_parse_noElse                                       65      56      -9
bc_program_binOpRetire                                56      46     -10
bc_parse_stmt                                       2271    2261     -10
bc_program_execStr                                   543     528     -15
bc_program_assignStr                                 161     146     -15
bc_parse_expr_empty_ok                              2178    2157     -21
bc_parse_endBody                                     420     375     -45
bc_program_asciify                                   464       -    -464
------------------------------------------------------------------------------
(add/remove: 4/1 grow/shrink: 2/24 up/down: 470/-651)        Total: -181 bytes
   text	   data	    bss	    dec	    hex	filename
 987227	    485	   7296	 995008	  f2ec0	busybox_old
 987046	    485	   7296	 994827	  f2e0b	busybox_unstripped

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 miscutils/bc.c | 17 +++++++++++++----
 1 file changed, 13 insertions(+), 4 deletions(-)

diff --git a/miscutils/bc.c b/miscutils/bc.c
index f936ad6f3..3d53db778 100644
--- a/miscutils/bc.c
+++ b/miscutils/bc.c
@@ -1069,8 +1069,12 @@ static void bc_vec_expand(BcVec *v, size_t req)
 	}
 }
 
-#define bc_vec_pop(v) (bc_vec_npop((v), 1))
-#define bc_vec_top(v) (bc_vec_item_rev((v), 0))
+static void bc_vec_pop(BcVec *v)
+{
+	v->len--;
+	if (v->dtor)
+		v->dtor(v->v + (v->size * v->len));
+}
 
 static void bc_vec_npop(BcVec *v, size_t n)
 {
@@ -1094,8 +1098,6 @@ static void bc_vec_push(BcVec *v, const void *data)
 	v->len += 1;
 }
 
-#define bc_parse_push(p, i) bc_vec_pushByte(&(p)->func->code, (char) (i))
-
 static void bc_vec_pushByte(BcVec *v, char data)
 {
 	bc_vec_push(v, &data);
@@ -1159,6 +1161,11 @@ static void *bc_vec_item_rev(const BcVec *v, size_t idx)
 	return v->v + v->size * (v->len - idx - 1);
 }
 
+static void *bc_vec_top(const BcVec *v)
+{
+	return v->v + v->size * (v->len - 1);
+}
+
 static void bc_vec_free(void *vec)
 {
 	BcVec *v = (BcVec *) vec;
@@ -3530,6 +3537,8 @@ static void bc_parse_addFunc(BcParse *p, char *name, size_t *idx)
 	p->func = bc_vec_item(&G.prog.fns, p->fidx);
 }
 
+#define bc_parse_push(p, i) bc_vec_pushByte(&(p)->func->code, (char) (i))
+
 static void bc_parse_pushName(BcParse *p, char *name)
 {
 	size_t i = 0, len = strlen(name);


More information about the busybox-cvs mailing list