aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2018-12-24 01:02:59 +0100
committerDenys Vlasenko <vda.linux@googlemail.com>2018-12-24 01:04:21 +0100
commit73b2c6082574aff51e5bb6560449c5fc746cf7bf (patch)
treeb7d4be2a7d5d6d30c021c9783e4ff43bf02ed0c9
parentad0bd381e97214c6c978f5214bcd328bfea4b3da (diff)
downloadbusybox-w32-73b2c6082574aff51e5bb6560449c5fc746cf7bf.tar.gz
busybox-w32-73b2c6082574aff51e5bb6560449c5fc746cf7bf.tar.bz2
busybox-w32-73b2c6082574aff51e5bb6560449c5fc746cf7bf.zip
bc: fix incorrect bit in BC_PARSE_EXPRS_BITS: 'limits' is not allowed
Alsl, move and rename dc_lex_tokens[] to dc_char_to_LEX[] Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--miscutils/bc.c90
1 files changed, 45 insertions, 45 deletions
diff --git a/miscutils/bc.c b/miscutils/bc.c
index 85eeb6743..d2583313c 100644
--- a/miscutils/bc.c
+++ b/miscutils/bc.c
@@ -572,7 +572,7 @@ enum {
572 + (EXBITS(1,1,1,0,0,1,1,0) << (3*8)) // 24: += -= = NL WS ( ) [ 572 + (EXBITS(1,1,1,0,0,1,1,0) << (3*8)) // 24: += -= = NL WS ( ) [
573 + (EXBITS(0,0,0,0,0,0,1,1) << (4*8)) // 32: , ] { ; } STR NAME NUM 573 + (EXBITS(0,0,0,0,0,0,1,1) << (4*8)) // 32: , ] { ; } STR NAME NUM
574 + (EXBITS(0,0,0,0,0,0,0,1) << (5*8)) // 40: auto break cont define else for halt ibase 574 + (EXBITS(0,0,0,0,0,0,0,1) << (5*8)) // 40: auto break cont define else for halt ibase
575 + (EXBITS(1,0,1,1,1,0,0,1) << (6*8)) // 48: obase if last len limits print quit read - bug, why "limits" is allowed? 575 + (EXBITS(1,0,1,1,0,0,0,1) << (6*8)) // 48: obase if last length limits print quit read
576 + (EXBITS(0,1,1,0,0,0,0,0) << (7*8)) // 56: return scale sqrt while 576 + (EXBITS(0,1,1,0,0,0,0,0) << (7*8)) // 56: return scale sqrt while
577#undef EXBITS 577#undef EXBITS
578}; 578};
@@ -613,6 +613,49 @@ static const uint8_t bc_parse_ops[] = {
613#endif // ENABLE_BC 613#endif // ENABLE_BC
614 614
615#if ENABLE_DC 615#if ENABLE_DC
616static const //BcLexType - should be this type
617uint8_t
618dc_char_to_LEX[] = {
619 /* %&'( */
620 BC_LEX_OP_MODULUS, BC_LEX_INVALID, BC_LEX_INVALID, BC_LEX_LPAREN,
621 /* )*+, */
622 BC_LEX_INVALID, BC_LEX_OP_MULTIPLY, BC_LEX_OP_PLUS, BC_LEX_INVALID,
623 /* -./ */
624 BC_LEX_OP_MINUS, BC_LEX_INVALID, BC_LEX_OP_DIVIDE,
625 /* 0123456789 */
626 BC_LEX_INVALID, BC_LEX_INVALID, BC_LEX_INVALID, BC_LEX_INVALID,
627 BC_LEX_INVALID, BC_LEX_INVALID, BC_LEX_INVALID, BC_LEX_INVALID,
628 BC_LEX_INVALID, BC_LEX_INVALID,
629 /* :;<=>?@ */
630 BC_LEX_COLON, BC_LEX_SCOLON, BC_LEX_OP_REL_GT, BC_LEX_OP_REL_EQ,
631 BC_LEX_OP_REL_LT, BC_LEX_KEY_READ, BC_LEX_INVALID,
632 /* ABCDEFGH */
633 BC_LEX_INVALID, BC_LEX_INVALID, BC_LEX_INVALID, BC_LEX_INVALID,
634 BC_LEX_INVALID, BC_LEX_INVALID, BC_LEX_EQ_NO_REG, BC_LEX_INVALID,
635 /* IJKLMNOP */
636 BC_LEX_KEY_IBASE, BC_LEX_INVALID, BC_LEX_KEY_SCALE, BC_LEX_LOAD_POP,
637 BC_LEX_INVALID, BC_LEX_OP_BOOL_NOT, BC_LEX_KEY_OBASE, BC_LEX_PRINT_STREAM,
638 /* QRSTUVWXY */
639 BC_LEX_NQUIT, BC_LEX_POP, BC_LEX_STORE_PUSH, BC_LEX_INVALID, BC_LEX_INVALID,
640 BC_LEX_INVALID, BC_LEX_INVALID, BC_LEX_SCALE_FACTOR, BC_LEX_INVALID,
641 /* Z[\] */
642 BC_LEX_KEY_LENGTH, BC_LEX_INVALID, BC_LEX_INVALID, BC_LEX_INVALID,
643 /* ^_` */
644 BC_LEX_OP_POWER, BC_LEX_NEG, BC_LEX_INVALID,
645 /* abcdefgh */
646 BC_LEX_ASCIIFY, BC_LEX_INVALID, BC_LEX_CLEAR_STACK, BC_LEX_DUPLICATE,
647 BC_LEX_ELSE, BC_LEX_PRINT_STACK, BC_LEX_INVALID, BC_LEX_INVALID,
648 /* ijklmnop */
649 BC_LEX_STORE_IBASE, BC_LEX_INVALID, BC_LEX_STORE_SCALE, BC_LEX_LOAD,
650 BC_LEX_INVALID, BC_LEX_PRINT_POP, BC_LEX_STORE_OBASE, BC_LEX_KEY_PRINT,
651 /* qrstuvwx */
652 BC_LEX_KEY_QUIT, BC_LEX_SWAP, BC_LEX_OP_ASSIGN, BC_LEX_INVALID,
653 BC_LEX_INVALID, BC_LEX_KEY_SQRT, BC_LEX_INVALID, BC_LEX_EXECUTE,
654 /* yz */
655 BC_LEX_INVALID, BC_LEX_STACK_LEVEL,
656 /* {|}~ */
657 BC_LEX_LBRACE, BC_LEX_OP_MODEXP, BC_LEX_INVALID, BC_LEX_OP_DIVMOD,
658};
616static const //BcInst - should be this type. Using signed narrow type since BC_INST_INVALID is -1 659static const //BcInst - should be this type. Using signed narrow type since BC_INST_INVALID is -1
617int8_t 660int8_t
618dc_LEX_to_INST[] = { // (so many INVALIDs b/c dc parser does not generate these LEXs) // corresponding BC_LEX_xyz: 661dc_LEX_to_INST[] = { // (so many INVALIDs b/c dc parser does not generate these LEXs) // corresponding BC_LEX_xyz:
@@ -3381,49 +3424,6 @@ static BC_STATUS zdc_lex_token(BcLex *l)
3381 BC_LEX_ELSE, BC_LEX_LOAD, BC_LEX_LOAD_POP, BC_LEX_OP_ASSIGN, 3424 BC_LEX_ELSE, BC_LEX_LOAD, BC_LEX_LOAD_POP, BC_LEX_OP_ASSIGN,
3382 BC_LEX_STORE_PUSH, 3425 BC_LEX_STORE_PUSH,
3383 }; 3426 };
3384 static const //BcLexType - should be this type
3385 uint8_t
3386 dc_lex_tokens[] = {
3387 /* %&'( */
3388 BC_LEX_OP_MODULUS, BC_LEX_INVALID, BC_LEX_INVALID, BC_LEX_LPAREN,
3389 /* )*+, */
3390 BC_LEX_INVALID, BC_LEX_OP_MULTIPLY, BC_LEX_OP_PLUS, BC_LEX_INVALID,
3391 /* -./ */
3392 BC_LEX_OP_MINUS, BC_LEX_INVALID, BC_LEX_OP_DIVIDE,
3393 /* 0123456789 */
3394 BC_LEX_INVALID, BC_LEX_INVALID, BC_LEX_INVALID, BC_LEX_INVALID,
3395 BC_LEX_INVALID, BC_LEX_INVALID, BC_LEX_INVALID, BC_LEX_INVALID,
3396 BC_LEX_INVALID, BC_LEX_INVALID,
3397 /* :;<=>?@ */
3398 BC_LEX_COLON, BC_LEX_SCOLON, BC_LEX_OP_REL_GT, BC_LEX_OP_REL_EQ,
3399 BC_LEX_OP_REL_LT, BC_LEX_KEY_READ, BC_LEX_INVALID,
3400 /* ABCDEFGH */
3401 BC_LEX_INVALID, BC_LEX_INVALID, BC_LEX_INVALID, BC_LEX_INVALID,
3402 BC_LEX_INVALID, BC_LEX_INVALID, BC_LEX_EQ_NO_REG, BC_LEX_INVALID,
3403 /* IJKLMNOP */
3404 BC_LEX_KEY_IBASE, BC_LEX_INVALID, BC_LEX_KEY_SCALE, BC_LEX_LOAD_POP,
3405 BC_LEX_INVALID, BC_LEX_OP_BOOL_NOT, BC_LEX_KEY_OBASE, BC_LEX_PRINT_STREAM,
3406 /* QRSTUVWXY */
3407 BC_LEX_NQUIT, BC_LEX_POP, BC_LEX_STORE_PUSH, BC_LEX_INVALID, BC_LEX_INVALID,
3408 BC_LEX_INVALID, BC_LEX_INVALID, BC_LEX_SCALE_FACTOR, BC_LEX_INVALID,
3409 /* Z[\] */
3410 BC_LEX_KEY_LENGTH, BC_LEX_INVALID, BC_LEX_INVALID, BC_LEX_INVALID,
3411 /* ^_` */
3412 BC_LEX_OP_POWER, BC_LEX_NEG, BC_LEX_INVALID,
3413 /* abcdefgh */
3414 BC_LEX_ASCIIFY, BC_LEX_INVALID, BC_LEX_CLEAR_STACK, BC_LEX_DUPLICATE,
3415 BC_LEX_ELSE, BC_LEX_PRINT_STACK, BC_LEX_INVALID, BC_LEX_INVALID,
3416 /* ijklmnop */
3417 BC_LEX_STORE_IBASE, BC_LEX_INVALID, BC_LEX_STORE_SCALE, BC_LEX_LOAD,
3418 BC_LEX_INVALID, BC_LEX_PRINT_POP, BC_LEX_STORE_OBASE, BC_LEX_KEY_PRINT,
3419 /* qrstuvwx */
3420 BC_LEX_KEY_QUIT, BC_LEX_SWAP, BC_LEX_OP_ASSIGN, BC_LEX_INVALID,
3421 BC_LEX_INVALID, BC_LEX_KEY_SQRT, BC_LEX_INVALID, BC_LEX_EXECUTE,
3422 /* yz */
3423 BC_LEX_INVALID, BC_LEX_STACK_LEVEL,
3424 /* {|}~ */
3425 BC_LEX_LBRACE, BC_LEX_OP_MODEXP, BC_LEX_INVALID, BC_LEX_OP_DIVMOD,
3426 };
3427 3427
3428 BcStatus s = BC_STATUS_SUCCESS; 3428 BcStatus s = BC_STATUS_SUCCESS;
3429 char c = l->buf[l->i++], c2; 3429 char c = l->buf[l->i++], c2;
@@ -3435,7 +3435,7 @@ static BC_STATUS zdc_lex_token(BcLex *l)
3435 } 3435 }
3436 3436
3437 if (c >= '%' && c <= '~' 3437 if (c >= '%' && c <= '~'
3438 && (l->t.t = dc_lex_tokens[c - '%']) != BC_LEX_INVALID 3438 && (l->t.t = dc_char_to_LEX[c - '%']) != BC_LEX_INVALID
3439 ) { 3439 ) {
3440 RETURN_STATUS(s); 3440 RETURN_STATUS(s);
3441 } 3441 }