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>
This commit is contained in:
parent
7b1df3db97
commit
0154d78738
@ -566,48 +566,37 @@ typedef struct BcLex {
|
|||||||
|
|
||||||
} BcLex;
|
} BcLex;
|
||||||
|
|
||||||
#define BC_PARSE_STREND ((char) UCHAR_MAX)
|
#define BC_PARSE_STREND ((char) UCHAR_MAX)
|
||||||
|
|
||||||
#define BC_PARSE_REL (1 << 0)
|
#define BC_PARSE_REL (1 << 0)
|
||||||
#define BC_PARSE_PRINT (1 << 1)
|
#define BC_PARSE_PRINT (1 << 1)
|
||||||
#define BC_PARSE_NOCALL (1 << 2)
|
#define BC_PARSE_NOCALL (1 << 2)
|
||||||
#define BC_PARSE_NOREAD (1 << 3)
|
#define BC_PARSE_NOREAD (1 << 3)
|
||||||
#define BC_PARSE_ARRAY (1 << 4)
|
#define BC_PARSE_ARRAY (1 << 4)
|
||||||
|
|
||||||
#define BC_PARSE_TOP_FLAG_PTR(parse) ((uint8_t *) bc_vec_top(&(parse)->flags))
|
#define BC_PARSE_TOP_FLAG_PTR(parse) ((uint8_t *) bc_vec_top(&(parse)->flags))
|
||||||
#define BC_PARSE_TOP_FLAG(parse) (*(BC_PARSE_TOP_FLAG_PTR(parse)))
|
#define BC_PARSE_TOP_FLAG(parse) (*(BC_PARSE_TOP_FLAG_PTR(parse)))
|
||||||
|
|
||||||
#define BC_PARSE_FLAG_FUNC_INNER (1 << 0)
|
#define BC_PARSE_FLAG_FUNC_INNER (1 << 0)
|
||||||
#define BC_PARSE_FUNC_INNER(parse) \
|
#define BC_PARSE_FLAG_FUNC (1 << 1)
|
||||||
(BC_PARSE_TOP_FLAG(parse) & BC_PARSE_FLAG_FUNC_INNER)
|
#define BC_PARSE_FLAG_BODY (1 << 2)
|
||||||
|
#define BC_PARSE_FLAG_LOOP (1 << 3)
|
||||||
|
#define BC_PARSE_FLAG_LOOP_INNER (1 << 4)
|
||||||
|
#define BC_PARSE_FLAG_IF (1 << 5)
|
||||||
|
#define BC_PARSE_FLAG_ELSE (1 << 6)
|
||||||
|
#define BC_PARSE_FLAG_IF_END (1 << 7)
|
||||||
|
|
||||||
#define BC_PARSE_FLAG_FUNC (1 << 1)
|
// If we have none of the above bits, we can stop parsing and execute already parsed chunk
|
||||||
#define BC_PARSE_FUNC(parse) (BC_PARSE_TOP_FLAG(parse) & BC_PARSE_FLAG_FUNC)
|
#define BC_PARSE_CAN_EXEC(parse) (BC_PARSE_TOP_FLAG(parse) == 0)
|
||||||
|
|
||||||
#define BC_PARSE_FLAG_BODY (1 << 2)
|
#define BC_PARSE_FUNC_INNER(parse) (BC_PARSE_TOP_FLAG(parse) & BC_PARSE_FLAG_FUNC_INNER)
|
||||||
#define BC_PARSE_BODY(parse) (BC_PARSE_TOP_FLAG(parse) & BC_PARSE_FLAG_BODY)
|
#define BC_PARSE_FUNC(parse) (BC_PARSE_TOP_FLAG(parse) & BC_PARSE_FLAG_FUNC)
|
||||||
|
#define BC_PARSE_BODY(parse) (BC_PARSE_TOP_FLAG(parse) & BC_PARSE_FLAG_BODY)
|
||||||
#define BC_PARSE_FLAG_LOOP (1 << 3)
|
#define BC_PARSE_LOOP(parse) (BC_PARSE_TOP_FLAG(parse) & BC_PARSE_FLAG_LOOP)
|
||||||
#define BC_PARSE_LOOP(parse) (BC_PARSE_TOP_FLAG(parse) & BC_PARSE_FLAG_LOOP)
|
#define BC_PARSE_LOOP_INNER(parse) (BC_PARSE_TOP_FLAG(parse) & BC_PARSE_FLAG_LOOP_INNER)
|
||||||
|
#define BC_PARSE_IF(parse) (BC_PARSE_TOP_FLAG(parse) & BC_PARSE_FLAG_IF)
|
||||||
#define BC_PARSE_FLAG_LOOP_INNER (1 << 4)
|
#define BC_PARSE_ELSE(parse) (BC_PARSE_TOP_FLAG(parse) & BC_PARSE_FLAG_ELSE)
|
||||||
#define BC_PARSE_LOOP_INNER(parse) \
|
#define BC_PARSE_IF_END(parse) (BC_PARSE_TOP_FLAG(parse) & BC_PARSE_FLAG_IF_END)
|
||||||
(BC_PARSE_TOP_FLAG(parse) & BC_PARSE_FLAG_LOOP_INNER)
|
|
||||||
|
|
||||||
#define BC_PARSE_FLAG_IF (1 << 5)
|
|
||||||
#define BC_PARSE_IF(parse) (BC_PARSE_TOP_FLAG(parse) & BC_PARSE_FLAG_IF)
|
|
||||||
|
|
||||||
#define BC_PARSE_FLAG_ELSE (1 << 6)
|
|
||||||
#define BC_PARSE_ELSE(parse) (BC_PARSE_TOP_FLAG(parse) & BC_PARSE_FLAG_ELSE)
|
|
||||||
|
|
||||||
#define BC_PARSE_FLAG_IF_END (1 << 7)
|
|
||||||
#define BC_PARSE_IF_END(parse) (BC_PARSE_TOP_FLAG(parse) & BC_PARSE_FLAG_IF_END)
|
|
||||||
|
|
||||||
#define BC_PARSE_CAN_EXEC(parse) \
|
|
||||||
(!(BC_PARSE_TOP_FLAG(parse) & \
|
|
||||||
(BC_PARSE_FLAG_FUNC_INNER | BC_PARSE_FLAG_FUNC | BC_PARSE_FLAG_BODY | \
|
|
||||||
BC_PARSE_FLAG_LOOP | BC_PARSE_FLAG_LOOP_INNER | BC_PARSE_FLAG_IF | \
|
|
||||||
BC_PARSE_FLAG_ELSE | BC_PARSE_FLAG_IF_END)))
|
|
||||||
|
|
||||||
struct BcParse;
|
struct BcParse;
|
||||||
|
|
||||||
@ -3611,7 +3600,7 @@ static void bc_parse_create(BcParse *p, size_t func)
|
|||||||
// We can calculate the conversion between tokens and exprs by subtracting the
|
// We can calculate the conversion between tokens and exprs by subtracting the
|
||||||
// position of the first operator in the lex enum and adding the position of the
|
// position of the first operator in the lex enum and adding the position of the
|
||||||
// first in the expr enum. Note: This only works for binary operators.
|
// first in the expr enum. Note: This only works for binary operators.
|
||||||
#define BC_PARSE_TOKEN_INST(t) ((char) ((t) - BC_LEX_NEG + BC_INST_NEG))
|
#define BC_TOKEN_2_INST(t) ((char) ((t) - BC_LEX_NEG + BC_INST_NEG))
|
||||||
|
|
||||||
static BC_STATUS zbc_parse_else(BcParse *p);
|
static BC_STATUS zbc_parse_else(BcParse *p);
|
||||||
static BC_STATUS zbc_parse_stmt(BcParse *p);
|
static BC_STATUS zbc_parse_stmt(BcParse *p);
|
||||||
@ -3636,7 +3625,7 @@ static void bc_parse_operator(BcParse *p, BcLexType type, size_t start,
|
|||||||
l = bc_parse_op_PREC(t - BC_LEX_OP_INC);
|
l = bc_parse_op_PREC(t - BC_LEX_OP_INC);
|
||||||
if (l >= r && (l != r || !left)) break;
|
if (l >= r && (l != r || !left)) break;
|
||||||
|
|
||||||
bc_parse_push(p, BC_PARSE_TOKEN_INST(t));
|
bc_parse_push(p, BC_TOKEN_2_INST(t));
|
||||||
bc_vec_pop(&p->ops);
|
bc_vec_pop(&p->ops);
|
||||||
*nexprs -= (t != BC_LEX_OP_BOOL_NOT && t != BC_LEX_NEG);
|
*nexprs -= (t != BC_LEX_OP_BOOL_NOT && t != BC_LEX_NEG);
|
||||||
}
|
}
|
||||||
@ -3653,7 +3642,7 @@ static BC_STATUS zbc_parse_rightParen(BcParse *p, size_t ops_bgn, size_t *nexs)
|
|||||||
top = BC_PARSE_TOP_OP(p);
|
top = BC_PARSE_TOP_OP(p);
|
||||||
|
|
||||||
while (top != BC_LEX_LPAREN) {
|
while (top != BC_LEX_LPAREN) {
|
||||||
bc_parse_push(p, BC_PARSE_TOKEN_INST(top));
|
bc_parse_push(p, BC_TOKEN_2_INST(top));
|
||||||
|
|
||||||
bc_vec_pop(&p->ops);
|
bc_vec_pop(&p->ops);
|
||||||
*nexs -= top != BC_LEX_OP_BOOL_NOT && top != BC_LEX_NEG;
|
*nexs -= top != BC_LEX_OP_BOOL_NOT && top != BC_LEX_NEG;
|
||||||
@ -3948,7 +3937,7 @@ static BC_STATUS zbc_parse_minus(BcParse *p, BcInst *prev, size_t ops_bgn,
|
|||||||
(etype >= BC_INST_NUM && etype <= BC_INST_SQRT) ?
|
(etype >= BC_INST_NUM && etype <= BC_INST_SQRT) ?
|
||||||
BC_LEX_OP_MINUS :
|
BC_LEX_OP_MINUS :
|
||||||
BC_LEX_NEG;
|
BC_LEX_NEG;
|
||||||
*prev = BC_PARSE_TOKEN_INST(type);
|
*prev = BC_TOKEN_2_INST(type);
|
||||||
|
|
||||||
// We can just push onto the op stack because this is the largest
|
// We can just push onto the op stack because this is the largest
|
||||||
// precedence operator that gets pushed. Inc/dec does not.
|
// precedence operator that gets pushed. Inc/dec does not.
|
||||||
@ -4747,10 +4736,9 @@ static BcStatus bc_parse_expr_empty_ok(BcParse *p, uint8_t flags, BcParseNext ne
|
|||||||
prev != BC_INST_OBASE && prev != BC_INST_LAST)
|
prev != BC_INST_OBASE && prev != BC_INST_LAST)
|
||||||
{
|
{
|
||||||
s = bc_error("bad assignment:"
|
s = bc_error("bad assignment:"
|
||||||
" left side must be scale,"
|
" left side must be variable"
|
||||||
" ibase, obase, last, var,"
|
|
||||||
" or array element"
|
" or array element"
|
||||||
);
|
); // note: shared string
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -4777,7 +4765,7 @@ static BcStatus bc_parse_expr_empty_ok(BcParse *p, uint8_t flags, BcParseNext ne
|
|||||||
}
|
}
|
||||||
|
|
||||||
nrelops += t >= BC_LEX_OP_REL_EQ && t <= BC_LEX_OP_REL_GT;
|
nrelops += t >= BC_LEX_OP_REL_EQ && t <= BC_LEX_OP_REL_GT;
|
||||||
prev = BC_PARSE_TOKEN_INST(t);
|
prev = BC_TOKEN_2_INST(t);
|
||||||
bc_parse_operator(p, t, ops_bgn, &nexprs);
|
bc_parse_operator(p, t, ops_bgn, &nexprs);
|
||||||
s = zbc_lex_next(&p->l);
|
s = zbc_lex_next(&p->l);
|
||||||
rprn = get_token = false;
|
rprn = get_token = false;
|
||||||
@ -4926,7 +4914,7 @@ static BcStatus bc_parse_expr_empty_ok(BcParse *p, uint8_t flags, BcParseNext ne
|
|||||||
if (top == BC_LEX_LPAREN || top == BC_LEX_RPAREN)
|
if (top == BC_LEX_LPAREN || top == BC_LEX_RPAREN)
|
||||||
return bc_error_bad_expression();
|
return bc_error_bad_expression();
|
||||||
|
|
||||||
bc_parse_push(p, BC_PARSE_TOKEN_INST(top));
|
bc_parse_push(p, BC_TOKEN_2_INST(top));
|
||||||
|
|
||||||
nexprs -= top != BC_LEX_OP_BOOL_NOT && top != BC_LEX_NEG;
|
nexprs -= top != BC_LEX_OP_BOOL_NOT && top != BC_LEX_NEG;
|
||||||
bc_vec_pop(&p->ops);
|
bc_vec_pop(&p->ops);
|
||||||
@ -5977,10 +5965,9 @@ static BC_STATUS zbc_program_assign(char inst)
|
|||||||
|
|
||||||
if (left->t == BC_RESULT_CONSTANT || left->t == BC_RESULT_TEMP)
|
if (left->t == BC_RESULT_CONSTANT || left->t == BC_RESULT_TEMP)
|
||||||
RETURN_STATUS(bc_error("bad assignment:"
|
RETURN_STATUS(bc_error("bad assignment:"
|
||||||
" left side must be scale,"
|
" left side must be variable"
|
||||||
" ibase, obase, last, var,"
|
|
||||||
" or array element"
|
" or array element"
|
||||||
));
|
)); // note: shared string
|
||||||
|
|
||||||
#if ENABLE_BC
|
#if ENABLE_BC
|
||||||
if (inst == BC_INST_ASSIGN_DIVIDE && !bc_num_cmp(r, &G.prog.zero))
|
if (inst == BC_INST_ASSIGN_DIVIDE && !bc_num_cmp(r, &G.prog.zero))
|
||||||
|
Loading…
Reference in New Issue
Block a user