aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--miscutils/bc.c13
1 files changed, 5 insertions, 8 deletions
diff --git a/miscutils/bc.c b/miscutils/bc.c
index 8aaeeaf9f..6e39aeed3 100644
--- a/miscutils/bc.c
+++ b/miscutils/bc.c
@@ -3529,12 +3529,9 @@ static void bc_parse_push(BcParse *p, char i)
3529 3529
3530static void bc_parse_pushName(BcParse *p, char *name) 3530static void bc_parse_pushName(BcParse *p, char *name)
3531{ 3531{
3532 size_t i = 0, len = strlen(name); 3532 while (*name)
3533 3533 bc_parse_push(p, *name++);
3534 for (; i < len; ++i) bc_parse_push(p, name[i]);
3535 bc_parse_push(p, BC_PARSE_STREND); 3534 bc_parse_push(p, BC_PARSE_STREND);
3536
3537 free(name);
3538} 3535}
3539 3536
3540static void bc_parse_pushIndex(BcParse *p, size_t idx) 3537static void bc_parse_pushIndex(BcParse *p, size_t idx)
@@ -3828,6 +3825,7 @@ static BC_STATUS zbc_parse_name(BcParse *p, BcInst *type, uint8_t flags)
3828 if (s) goto err; 3825 if (s) goto err;
3829 bc_parse_push(p, *type); 3826 bc_parse_push(p, *type);
3830 bc_parse_pushName(p, name); 3827 bc_parse_pushName(p, name);
3828 free(name);
3831 } 3829 }
3832 else if (p->l.t.t == BC_LEX_LPAREN) { 3830 else if (p->l.t.t == BC_LEX_LPAREN) {
3833 if (flags & BC_PARSE_NOCALL) { 3831 if (flags & BC_PARSE_NOCALL) {
@@ -3840,6 +3838,7 @@ static BC_STATUS zbc_parse_name(BcParse *p, BcInst *type, uint8_t flags)
3840 *type = BC_INST_VAR; 3838 *type = BC_INST_VAR;
3841 bc_parse_push(p, BC_INST_VAR); 3839 bc_parse_push(p, BC_INST_VAR);
3842 bc_parse_pushName(p, name); 3840 bc_parse_pushName(p, name);
3841 free(name);
3843 } 3842 }
3844 3843
3845 RETURN_STATUS(s); 3844 RETURN_STATUS(s);
@@ -4970,14 +4969,12 @@ static BC_STATUS zbc_parse_expr(BcParse *p, uint8_t flags, BcParseNext next)
4970static BC_STATUS zdc_parse_register(BcParse *p) 4969static BC_STATUS zdc_parse_register(BcParse *p)
4971{ 4970{
4972 BcStatus s; 4971 BcStatus s;
4973 char *name;
4974 4972
4975 s = zbc_lex_next(&p->l); 4973 s = zbc_lex_next(&p->l);
4976 if (s) RETURN_STATUS(s); 4974 if (s) RETURN_STATUS(s);
4977 if (p->l.t.t != BC_LEX_NAME) RETURN_STATUS(bc_error_bad_token()); 4975 if (p->l.t.t != BC_LEX_NAME) RETURN_STATUS(bc_error_bad_token());
4978 4976
4979 name = xstrdup(p->l.t.v.v); 4977 bc_parse_pushName(p, p->l.t.v.v);
4980 bc_parse_pushName(p, name);
4981 4978
4982 RETURN_STATUS(s); 4979 RETURN_STATUS(s);
4983} 4980}