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 /miscutils | |
| 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>
Diffstat (limited to 'miscutils')
| -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 | } |
