[git commit] bc: stop using BC_PARSE_NOCALL in dc code

Denys Vlasenko vda.linux at googlemail.com
Sat Dec 22 01:23:08 UTC 2018


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

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 at googlemail.com>
---
 miscutils/bc.c | 36 ++++++++++++++++++------------------
 1 file changed, 18 insertions(+), 18 deletions(-)

diff --git a/miscutils/bc.c b/miscutils/bc.c
index 1ba8427da..65f98afc2 100644
--- a/miscutils/bc.c
+++ b/miscutils/bc.c
@@ -302,16 +302,14 @@ typedef enum BcInst {
 	BC_INST_PRINT_STR,
 
 #if ENABLE_BC
+	BC_INST_HALT,
 	BC_INST_JUMP,
 	BC_INST_JUMP_ZERO,
 
 	BC_INST_CALL,
-
-	BC_INST_RET,
 	BC_INST_RET0,
-
-	BC_INST_HALT,
 #endif
+	BC_INST_RET,
 
 	BC_INST_POP,
 #if ENABLE_DC
@@ -659,10 +657,12 @@ typedef struct BcLex {
 
 #define BC_PARSE_STREND         (0xff)
 
-#define BC_PARSE_REL            (1 << 0)
-#define BC_PARSE_PRINT          (1 << 1)
-#define BC_PARSE_NOCALL         (1 << 2)
-#define BC_PARSE_ARRAY          (1 << 3)
+#if ENABLE_BC
+# define BC_PARSE_REL           (1 << 0)
+# define BC_PARSE_PRINT         (1 << 1)
+# define BC_PARSE_ARRAY         (1 << 2)
+# define BC_PARSE_NOCALL        (1 << 3)
+#endif
 
 typedef struct BcParse {
 	BcLex l;
@@ -4976,7 +4976,7 @@ static BC_STATUS zdc_parse_token(BcParse *p, BcLexType t)
 }
 #define zdc_parse_token(...) (zdc_parse_token(__VA_ARGS__) COMMA_SUCCESS)
 
-static BC_STATUS zdc_parse_expr(BcParse *p, uint8_t flags)
+static BC_STATUS zdc_parse_expr(BcParse *p)
 {
 	BcLexType t;
 
@@ -5000,9 +5000,6 @@ static BC_STATUS zdc_parse_expr(BcParse *p, uint8_t flags)
 		if (s) RETURN_STATUS(s);
 	}
 
-	if (flags & BC_PARSE_NOCALL)
-		bc_parse_push(p, BC_INST_POP_EXEC);
-
 	dbg_lex_done("%s:%d done", __func__, __LINE__);
 	RETURN_STATUS(BC_STATUS_SUCCESS);
 }
@@ -5015,7 +5012,7 @@ static BC_STATUS zdc_parse_parse(BcParse *p)
 	if (p->l.t.t == BC_LEX_EOF)
 		s = bc_error("end of file");
 	else
-		s = zdc_parse_expr(p, 0);
+		s = zdc_parse_expr(p);
 
 	if (s || G_interrupt) {
 		bc_parse_reset(p);
@@ -5028,8 +5025,8 @@ static BC_STATUS zdc_parse_parse(BcParse *p)
 
 #endif // ENABLE_DC
 
-#if !ENABLE_DC
-#define common_parse_expr(p,flags) \
+#if !ENABLE_BC
+#define common_parse_expr(p, flags) \
 	common_parse_expr(p)
 #define flags 0
 #endif
@@ -5038,8 +5035,9 @@ static BC_STATUS common_parse_expr(BcParse *p, uint8_t flags)
 	if (IS_BC) {
 		IF_BC(RETURN_STATUS(zbc_parse_expr(p, flags)));
 	} else {
-		IF_DC(RETURN_STATUS(zdc_parse_expr(p, flags)));
+		IF_DC(RETURN_STATUS(zdc_parse_expr(p)));
 	}
+#undef flags
 }
 #define zcommon_parse_expr(...) (common_parse_expr(__VA_ARGS__) COMMA_SUCCESS)
 
@@ -6375,7 +6373,7 @@ static BC_STATUS zdc_program_execStr(char *code, size_t *bgn, bool cond)
 		str = *bc_program_str(sidx);
 		s = zbc_parse_text_init(&prs, str);
 		if (s) goto err;
-		s = zcommon_parse_expr(&prs, BC_PARSE_NOCALL);
+		s = zcommon_parse_expr(&prs, 0);
 		if (s) goto err;
 		if (prs.l.t.t != BC_LEX_EOF) {
 			s = bc_error_bad_expression();
@@ -6384,6 +6382,7 @@ static BC_STATUS zdc_program_execStr(char *code, size_t *bgn, bool cond)
 			bc_vec_pop_all(&f->code);
 			goto exit;
 		}
+		bc_parse_push(&prs, BC_INST_POP_EXEC);
 		bc_parse_free(&prs);
 	}
 
@@ -6696,9 +6695,10 @@ static BC_STATUS zbc_vm_process(const char *text)
 	if (s) RETURN_STATUS(s);
 
 	while (G.prs.l.t.t != BC_LEX_EOF) {
-		dbg_lex("%s:%d G.prs.l.t.t:%d", __func__, __LINE__, G.prs.l.t.t);
+		dbg_lex("%s:%d G.prs.l.t.t:%d, parsing...", __func__, __LINE__, G.prs.l.t.t);
 		s = zcommon_parse(&G.prs);
 		if (s) RETURN_STATUS(s);
+		dbg_lex("%s:%d executing...", __func__, __LINE__);
 		s = zbc_program_exec();
 		if (s) {
 			bc_program_reset();


More information about the busybox-cvs mailing list