bc: remove lexer function pointer
function old new delta zbc_lex_next 81 1930 +1849 bc_parse_create 131 124 -7 common_parse_init 31 - -31 zdc_lex_token 672 - -672 zbc_lex_token 1193 - -1193 ------------------------------------------------------------------------------ (add/remove: 0/3 grow/shrink: 1/1 up/down: 1849/-1903) Total: -54 bytes text data bss dec hex filename 980634 485 7296 988415 f14ff busybox_old 980580 485 7296 988361 f14c9 busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
@ -549,9 +549,6 @@ enum {
|
|||||||
# define BC_STATUS void
|
# define BC_STATUS void
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
struct BcLex;
|
|
||||||
typedef BC_STATUS (*BcLexNext)(struct BcLex *) FAST_FUNC;
|
|
||||||
|
|
||||||
typedef struct BcLex {
|
typedef struct BcLex {
|
||||||
|
|
||||||
const char *buf;
|
const char *buf;
|
||||||
@ -566,8 +563,6 @@ typedef struct BcLex {
|
|||||||
BcVec v;
|
BcVec v;
|
||||||
} t;
|
} t;
|
||||||
|
|
||||||
BcLexNext next;
|
|
||||||
|
|
||||||
} BcLex;
|
} BcLex;
|
||||||
|
|
||||||
#define BC_PARSE_STREND ((char) UCHAR_MAX)
|
#define BC_PARSE_STREND ((char) UCHAR_MAX)
|
||||||
@ -2911,9 +2906,8 @@ static void bc_lex_name(BcLex *l)
|
|||||||
//return BC_STATUS_SUCCESS;
|
//return BC_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void bc_lex_init(BcLex *l, BcLexNext next)
|
static void bc_lex_init(BcLex *l)
|
||||||
{
|
{
|
||||||
l->next = next;
|
|
||||||
bc_char_vec_init(&l->t.v);
|
bc_char_vec_init(&l->t.v);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2928,6 +2922,17 @@ static void bc_lex_file(BcLex *l)
|
|||||||
l->newline = false;
|
l->newline = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static BC_STATUS zbc_lex_token(BcLex *l);
|
||||||
|
static BC_STATUS zdc_lex_token(BcLex *l);
|
||||||
|
|
||||||
|
static BC_STATUS zcommon_lex_token(BcLex *l)
|
||||||
|
{
|
||||||
|
if (IS_BC) {
|
||||||
|
IF_BC(RETURN_STATUS(zbc_lex_token(l));)
|
||||||
|
}
|
||||||
|
IF_DC(RETURN_STATUS(zdc_lex_token(l));)
|
||||||
|
}
|
||||||
|
|
||||||
static BC_STATUS zbc_lex_next(BcLex *l)
|
static BC_STATUS zbc_lex_next(BcLex *l)
|
||||||
{
|
{
|
||||||
BcStatus s;
|
BcStatus s;
|
||||||
@ -2947,7 +2952,7 @@ static BC_STATUS zbc_lex_next(BcLex *l)
|
|||||||
s = BC_STATUS_SUCCESS;
|
s = BC_STATUS_SUCCESS;
|
||||||
do {
|
do {
|
||||||
//TODO: replace pointer with if(IS_BC)
|
//TODO: replace pointer with if(IS_BC)
|
||||||
ERROR_RETURN(s =) l->next(l);
|
ERROR_RETURN(s =) zcommon_lex_token(l);
|
||||||
} while (!s && l->t.t == BC_LEX_WHITESPACE);
|
} while (!s && l->t.t == BC_LEX_WHITESPACE);
|
||||||
|
|
||||||
RETURN_STATUS(s);
|
RETURN_STATUS(s);
|
||||||
@ -3091,7 +3096,7 @@ static BC_STATUS zbc_lex_comment(BcLex *l)
|
|||||||
# define zbc_lex_comment(...) (zbc_lex_comment(__VA_ARGS__), BC_STATUS_SUCCESS)
|
# define zbc_lex_comment(...) (zbc_lex_comment(__VA_ARGS__), BC_STATUS_SUCCESS)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static FAST_FUNC BC_STATUS zbc_lex_token(BcLex *l)
|
static BC_STATUS zbc_lex_token(BcLex *l)
|
||||||
{
|
{
|
||||||
BcStatus s = BC_STATUS_SUCCESS;
|
BcStatus s = BC_STATUS_SUCCESS;
|
||||||
char c = l->buf[l->i++], c2;
|
char c = l->buf[l->i++], c2;
|
||||||
@ -3341,7 +3346,7 @@ static BC_STATUS zdc_lex_string(BcLex *l)
|
|||||||
# define zdc_lex_string(...) (zdc_lex_string(__VA_ARGS__), BC_STATUS_SUCCESS)
|
# define zdc_lex_string(...) (zdc_lex_string(__VA_ARGS__), BC_STATUS_SUCCESS)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static FAST_FUNC BC_STATUS zdc_lex_token(BcLex *l)
|
static BC_STATUS zdc_lex_token(BcLex *l)
|
||||||
{
|
{
|
||||||
BcStatus s = BC_STATUS_SUCCESS;
|
BcStatus s = BC_STATUS_SUCCESS;
|
||||||
char c = l->buf[l->i++], c2;
|
char c = l->buf[l->i++], c2;
|
||||||
@ -3563,11 +3568,11 @@ static void bc_parse_free(BcParse *p)
|
|||||||
bc_lex_free(&p->l);
|
bc_lex_free(&p->l);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void bc_parse_create(BcParse *p, size_t func, BcLexNext next)
|
static void bc_parse_create(BcParse *p, size_t func)
|
||||||
{
|
{
|
||||||
memset(p, 0, sizeof(BcParse));
|
memset(p, 0, sizeof(BcParse));
|
||||||
|
|
||||||
bc_lex_init(&p->l, next);
|
bc_lex_init(&p->l);
|
||||||
bc_vec_init(&p->flags, sizeof(uint8_t), NULL);
|
bc_vec_init(&p->flags, sizeof(uint8_t), NULL);
|
||||||
bc_vec_init(&p->exits, sizeof(BcInstPtr), NULL);
|
bc_vec_init(&p->exits, sizeof(BcInstPtr), NULL);
|
||||||
bc_vec_init(&p->conds, sizeof(size_t), NULL);
|
bc_vec_init(&p->conds, sizeof(size_t), NULL);
|
||||||
@ -4933,11 +4938,6 @@ static BC_STATUS zbc_parse_expr(BcParse *p, uint8_t flags, BcParseNext next)
|
|||||||
# define zbc_parse_expr(...) (zbc_parse_expr(__VA_ARGS__), BC_STATUS_SUCCESS)
|
# define zbc_parse_expr(...) (zbc_parse_expr(__VA_ARGS__), BC_STATUS_SUCCESS)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void bc_parse_init(BcParse *p, size_t func)
|
|
||||||
{
|
|
||||||
bc_parse_create(p, func, zbc_lex_token);
|
|
||||||
}
|
|
||||||
|
|
||||||
static BC_STATUS zbc_parse_expression(BcParse *p, uint8_t flags)
|
static BC_STATUS zbc_parse_expression(BcParse *p, uint8_t flags)
|
||||||
{
|
{
|
||||||
RETURN_STATUS(zbc_parse_expr(p, flags, bc_parse_next_read));
|
RETURN_STATUS(zbc_parse_expr(p, flags, bc_parse_next_read));
|
||||||
@ -5159,22 +5159,8 @@ static BC_STATUS zdc_parse_parse(BcParse *p)
|
|||||||
# define zdc_parse_parse(...) (zdc_parse_parse(__VA_ARGS__), BC_STATUS_SUCCESS)
|
# define zdc_parse_parse(...) (zdc_parse_parse(__VA_ARGS__), BC_STATUS_SUCCESS)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void dc_parse_init(BcParse *p, size_t func)
|
|
||||||
{
|
|
||||||
bc_parse_create(p, func, zdc_lex_token);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif // ENABLE_DC
|
#endif // ENABLE_DC
|
||||||
|
|
||||||
static void common_parse_init(BcParse *p, size_t func)
|
|
||||||
{
|
|
||||||
if (IS_BC) {
|
|
||||||
IF_BC(bc_parse_init(p, func);)
|
|
||||||
} else {
|
|
||||||
IF_DC(dc_parse_init(p, func);)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static BC_STATUS zcommon_parse_expr(BcParse *p, uint8_t flags)
|
static BC_STATUS zcommon_parse_expr(BcParse *p, uint8_t flags)
|
||||||
{
|
{
|
||||||
if (IS_BC) {
|
if (IS_BC) {
|
||||||
@ -5411,7 +5397,7 @@ static BC_STATUS zbc_program_read(void)
|
|||||||
|
|
||||||
bc_read_line(&buf);
|
bc_read_line(&buf);
|
||||||
|
|
||||||
common_parse_init(&parse, BC_PROG_READ);
|
bc_parse_create(&parse, BC_PROG_READ);
|
||||||
bc_lex_file(&parse.l);
|
bc_lex_file(&parse.l);
|
||||||
|
|
||||||
s = zbc_parse_text(&parse, buf.v);
|
s = zbc_parse_text(&parse, buf.v);
|
||||||
@ -6612,7 +6598,7 @@ static BC_STATUS zbc_program_execStr(char *code, size_t *bgn,
|
|||||||
f = bc_program_func(fidx);
|
f = bc_program_func(fidx);
|
||||||
|
|
||||||
if (f->code.len == 0) {
|
if (f->code.len == 0) {
|
||||||
common_parse_init(&prs, fidx);
|
bc_parse_create(&prs, fidx);
|
||||||
s = zbc_parse_text(&prs, *str);
|
s = zbc_parse_text(&prs, *str);
|
||||||
if (s) goto err;
|
if (s) goto err;
|
||||||
s = zcommon_parse_expr(&prs, BC_PARSE_NOCALL);
|
s = zcommon_parse_expr(&prs, BC_PARSE_NOCALL);
|
||||||
@ -7480,7 +7466,7 @@ static int bc_vm_init(const char *env_len)
|
|||||||
if (IS_BC)
|
if (IS_BC)
|
||||||
IF_BC(bc_vm_envArgs();)
|
IF_BC(bc_vm_envArgs();)
|
||||||
bc_program_init();
|
bc_program_init();
|
||||||
common_parse_init(&G.prs, BC_PROG_MAIN);
|
bc_parse_create(&G.prs, BC_PROG_MAIN);
|
||||||
|
|
||||||
if (isatty(0)) {
|
if (isatty(0)) {
|
||||||
#if ENABLE_FEATURE_BC_SIGNALS
|
#if ENABLE_FEATURE_BC_SIGNALS
|
||||||
|
Reference in New Issue
Block a user