diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2018-12-24 01:02:59 +0100 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2018-12-24 01:04:21 +0100 |
commit | 73b2c6082574aff51e5bb6560449c5fc746cf7bf (patch) | |
tree | b7d4be2a7d5d6d30c021c9783e4ff43bf02ed0c9 | |
parent | ad0bd381e97214c6c978f5214bcd328bfea4b3da (diff) | |
download | busybox-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.c | 90 |
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 |
616 | static const //BcLexType - should be this type | ||
617 | uint8_t | ||
618 | dc_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 | }; | ||
616 | static const //BcInst - should be this type. Using signed narrow type since BC_INST_INVALID is -1 | 659 | static const //BcInst - should be this type. Using signed narrow type since BC_INST_INVALID is -1 |
617 | int8_t | 660 | int8_t |
618 | dc_LEX_to_INST[] = { // (so many INVALIDs b/c dc parser does not generate these LEXs) // corresponding BC_LEX_xyz: | 661 | dc_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 | } |